Post on 14-Aug-2015
Instalación servidor VSFTPD en RED HAT
Fernando Valin Rodriguez
29/03/2013
Lo primero es instalar el servidor ftp, en este caso vsftpd, para instalarlo en distribuciónes red hat, empleamos el siguiente comando.
# yum install vsftpd
A continuación editamos el archivo /etc/vsftpd.conf.
# vim /etc/vsftpd.conf
El contenido de este puede variar según las características que queramos dar al servicio, pero este sería el contenido mínimo necesario para que funcione bien con usuarios virtuales
# Bloquear el acceso anónimo
anonymous_enable=NO
# Permitir el acceso local, necesario para usuarios virtuales
local_enable=YES
# Permitir la escritura y la descarga de ficheros
write_enable=YES
download_enable=YES
# Máscara de ficheros
local_umask=022
# Puerto de conexión
connect_from_port_20=YES
# Generar archivo log
log_ftp_protocol=YES
# Otras características
listen=YES
xferlog_std_format=YES
pam_service_name=vsftpd
userlist_enable=YES
hide_ids=YES
# Enjaulamiento de usuario
chroot_local_user=YES
# Usarios virtuales y ruta de acceso
user_sub_token=$USER
local_root=/var/ftpdome/$USER
virtual_use_local_privs=YES
guest_enable=YES
nopriv_user=vsftpd
guest_username=vsftpd
Bien, ahora mismo con el archivo de configuración definido, lo que deberíamos conseguir es que cada usuario virtual (no pertenece a la maquina) pueda conectarse al servidor mediante ftp y tener su propio directorio para subir o descargar archivos que se encuentren en su directorio o sub-directorios, eso si, sin que pueda acceder a otros directorios que estén por encima del que le definimos. Para esto, primero tenemos que modificar la manera en que nos autenticamos en el servicio, esto lo haremos modificando el archivo pam, indicándole que la autentificación la haga a través de un archivo de texto.
Ahora se crea un archivo PAM para que use el archivo pata autenticar los usuarios (el nombre del archivo tiene que ser el mismo especificado en la opción pam_service_name del archivo vsftpd.conf) # nano /etc/pam.d/vsftpd
El archivo ya se crea por defecto al instalar vsftpd, así que comentad todas las lineas que contiene y añadid lo siguiente sin comentar: auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd account required pam_permit.so IMPORTANTE: Estas reglas tienen que ocupar una linea cada una, de lo contrario, serán tomadas como módulos distintos y no funcionará.
Ahora vamos a crear el archivo que contiene los usuarios y contraseñas, para esto utilizaremos htpasswd , el cual encripta las contraseñas de los usuarios virtuales mediante un hash, lo cual suma algo de seguridad.# cd /etc/vsftpd
(En caso de no tener instalado el modulo que nos permite utilizar htpasswd, lo instalamos)# yum install libpam-pwdfile
# htpasswd -c ftpd.passwd dome
Ahora creamos el usuario local al cual se conectaran los usuarios virtuales: # groupadd nogroup# useradd - -home /home/vsftpd - -gid nogroup -m - -shell /bin/false vsftpd
Bien, vamos a crear los directorios de los usuarios virtuales, uno para cada usuario virtual, tomaremos como ejemplo el usuario virtual “dome”, despues cambiamos su propietario por el usuario que gestiona los usuarios virtuales y por ultimo damos permisos 755 sobre los “home” de los usuarios virtuales. mkdir ftpdome
chown -R vsftpd:nogroup ftpdome
chmod 755 -R ftpdome
Y probamos si funciona como deseamos , lo correcto es que cada usuario virtual tenga su directorio y no pueda acceder a ningún otro que este a su mismo nivel (por ejemplo el del resto de usuarios virtuales) , pero que en su directorio y sub-directorios pueda descargar, crear y subir archivos.
IMPORTANTE: Durante la instalación del servidor, no conseguía logearme en el servicio FTP estando aparentemente todo correcto, el problema resultó ser que Cent OS no trae instalado el modulo de pam que utilizamos “pam_pwdfile.so” para autenticar a los usuarios, así que era imposible logearnos y mostraba el error 530: Login Failed. A continuación dejo la solución al problema.
Creating vsftpd virtual user usually needs pam_pwdfile.so, unfortunately, Centos doesn’t have official pam_pwdfile package that you can yum.So we need to install from source.This requires Linux-PAM-0.77.tar.gz and pam_pwdfile-0.99.tar.gz.
1. Install required tools
[root@yohanes ~]# yum -y install gcc make autoconf
2. Download and edit a file (only for 64bit Centos)
Notes: Ignore when it says rm: cannot remove `default.defs’: No such file or directory
[root@yohanes ~]# cd /usr/local/src[root@yohanes /usr/local/src]# wget http://www.kernel.org/pub/linux/libs/pam/pre/library/Linux-PAM-0.77.tar.gz[root@yohanes /usr/local/src]# tar zxvf Linux-PAM-0.77.tar.gz[root@yohanes /usr/local/src]# cd Linux-PAM-0.77/modules[root@yohanes /usr/local/src/Linux-PAM-0.77/modules]# wget http://cpbotha.net/files/pam_pwdfile/pam_pwdfile-0.99.tar.gz[root@yohanes /usr/local/src/Linux-PAM-0.77/modules]# tar zxvf pam_pwdfile-0.99.tar.gz[root@yohanes /usr/local/src/Linux-PAM-0.77]# cd ..[root@yohanes /usr/local/src/Linux-PAM-0.77]# rm default.defs[root@yohanes /usr/local/src/Linux-PAM-0.77]# ln -s defs/redhat.defs default.defs
Note for Centos 64bit
For 64bit centos, we need to edit configure.in and add -fPIC to the OS_CFLAGS so that it
reads[...]
### Example: -D_POSIX_SOURCE: needed on Linux but harms Solaris.case $OS inlinux)OS_CFLAGS="-ansi -D_POSIX_SOURCE -pedantic -fPIC"[...]
3. Compile and install pam_pwdfile.so
Regenerate configure file
[root@yohanes /usr/local/src/Linux-PAM-0.77]# autoconf
Compile
[root@yohanes /usr/local/src/Linux-PAM-0.77]# make all
For 32bit Centos, copy pam_pwdfile.so to /lib/security, for 64bit Centos use /lib64/security
[root@yohanes /usr/local/src/Linux-PAM-0.77]# cp modules/pam_pwdfile-0.99/pam_pwdfile.so /lib64/security