Montar un servidor ftp en linux (vsftpd / pure-FTPD)

Instalación de VSFTP

Configuración de una máquina CentOS con la tarjeta red ya conectada a internet.

Hay que ir a este directorio para ver la configuración de las tarjetas de red

/ect/sysconfig/network-scripts

Con el editor “vi” se debe modificar el archivo si la tarjeta no estuviera activa

Instalamos un servidor FTP el vsftpd, y luego el cliente ftp para comprobar que funciona en local.

instalacion vsftpd

yum install vsftpd
# para probar si funciona el servicio en local
yum install ftp
# por si hay que comprimir algo con zip, no obstante es mejor usar tar xvcf
yum install zip

para cuando hagamos envíos automatizados de muchos megas y de ficheros es conveniente enviarlos comprimidos para ahorrar ancho de banda.

Arrancamos el servidor FTP

systemctl start vsftpd.service

Opcional (si queremos dejar el servicio activo para que se arranque siempre):

systemctl enable vsftpd.service

Opcional (si queremos para el servicio activo para que se arranque siempre):

systemctl stop vsftpd.service

instalacion servicio vsftpd

Comprobamos que el servicio funciona:

ftp 127.0.0.1

Aquí debería aparecer el ftp pidiéndonos usuario y password (podemos probar con anonymous que no necesita contraseña)

comprobación FTP en localhost

Ahora vamos a intentar conectarnos desde otro sistema, en este caso desde un sistema Windows con el Filezilla Client instalado.

Cliente FTP (Filezilla intentando acceder como anonymous

 

Por defecto la carpeta habilitada en el sistema para las conexiones es:

/var/ftp/pub

Puede que la prueba anterior desde otro sistema no haya funcionado, entoces es muy probable que se tenga instalado el FirewallD (en caso de sistemas CentOS o iptables en otros sistemas) y entoces lo que tenemos que hacer ahora es abrir el firewall para que permita conexiones por FTP

firewall-cmd --permanent --add-service=ftp
systemctl restart firewalld.service

Comprobamos que el servicio desde fuera funciona (desde ftp de windows o mediente filezilla como antes):

  • Primero averiguamos la IP de la máquina: ip addr
  • Desde otro sistema por ejemplo windows: ftp <la-ip-de-la-maquina>
  • Aquí debería aparecer el ftp pidiéndonos usuario y password (podemos probar con anonymous)

El FTP anónimo funcionó porque por defecto VSFTPD permite las conexiones anónimas, para evitar esto simplemente habrá que abrir el archivo de configuración de VSFTPD que se encuentra en /etc/vsftpd/vsftpd.conf y cambiar la línea que pone anonymous_enable=YES por anonymous_enable=NO. Si quisieramos todo lo contrario, que anonymous pudiera no sólo entrar sino que además pudiera subir archivos o incluso crear carpetas tendríamos que cambiar las variables:

anon_upload_enable=YES
anon_mkdir_write_enable=YES

No obstante es una opción MUY poco aconsejable cuando el servidor está en Internet.

Luego una vez hechos los cambios toca reiniciar el servicio y comprobar que los cambios surgieron efecto.

systemctl restart vsftpd.service

Comprobación FTP bloqueado para anonymous

Llegado a este punto vamos a ver como crear usuarios para que puedan acceder por FTP a unas carpetas concretas para cada uno de esos usuarios, por ejemplo vamos a suponer que estamos creando un servidor WEB para que distintos clientes puedan mediante FTP  subir su página web

Vamos a crear una carpeta para que sirva de carpeta raiz:

  • cd /home
  • mkdir juanjo
  • cd juanjo
  • mkdir paginas
  • cd paginas
  • mkdir web

Ahora ya puestos vamos a crear un archivo dentro de la carpeta “web” para que tenga algo:

  • nano probando.html

Indicamos a SeLinux que esta nueva ruta es para anonymous, aquí tenemos dos posibilidades   

chcon -R -t public_content_t /home/juanjo/paginas/web
# Si queremos permitir la escritura en esa carpeta
chcon -R -t public_content_rw_t /home/juanjo/paginas/web 

Editamos el archivo vsftpd.conf  /etc/vsftpd y añadimos la constante, con eso vamos a configurar el servidor ftp para que trabaje por defecto (anonymous_root cuya variable es anon_root) :

anon_root=/home/juanjo/paginas/web

Para que SeLinux acepte la nueva carpeta del acceso anónimo hay que indicarle que es de acceso público, introduciendo el siguiente comando:

chcon -R -t public_content_t /home/juanjo/paginas/web 

Reiniciamos el servidor FTP

  • systemctl restart vsftpd.service

Ahora por ejemplo con un Filezila (Filezilla Client) comprobamos la conexión anonymous:

  • Descargar Filezilla Client
  • Conectar al servidor FTP (ver con ip addr  la dirección del servidor)
  • usuario: anonymous
  • clave: <aquí da lo mismo lo que se ponga>

ACCESO DE USUARIOS LOCALES.

Cada vez que creamos un usuario en Linux nos interesa que tenga acceso por FTP a su carpeta, para permitir esto hay que hacer los siguientes cambios.

Debemos indicar al sistema de seguridad de Linux que vamos a permitir que los usuarios accedan por FTP a sus carpetas:

setsebool -P ftp_home_dir on
setsebool allow_ftpd_full_access on

Editar (nano) el archivo vsftpd.conf de la carpeta /etc/vsftpd

  • local_enable=YES

Reiniciamos el servidor FTP

  • systemctl restart vsftpd.service

Ahora vamos a crear un usuario para probar

useradd -g ftp -d /home/juanjo juanjo
passwd juanjo

Vamos a darle permisos a todos los usuarios para que puedan entrar en la carpeta de juanjo:

chmod -R 755 /home/juanjo

Usuarios enjaulados

sudo adduser --home /var/www/html/usuario1 --no-create-home --shell /bin/bash usuario1
passwd usuario1
mkdir /var/www/html/usuario1
chmod -R 755 /var/www/html/usuario1
setsebool -P ftp_home_dir
setsebool allow_ftpd_full_access on
chown usuario1:ftp ./usuario1

Instalación PureFTPd

Tutorial de instalación paso a paso del servidor de FTP PureFTPd
Primero añadimos el repositorio donde está el Pure-FTP ya que en CentOS por defecto utiliza el VSFTPD

cd ~
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
cd /tmp
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
rpm --import https://fedoraproject.org/static/0608B895.txt
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
yum update
yum install pure-ftpd

Ahora configuramos el PureFTPD

cd /etc/pure-ftpd/
nano -w pure-ftpd.conf
  • UnixAuthentication yes
  • VerboseLog yes
  • PureDB /etc/pure-ftpd/pureftpd.pdb
  • CreateHomeDir yes

ssss