Ads 468x60px

domingo, 3 de marzo de 2013

Usuarios Virtuales + VSFTPD






Aca les voy a explicar como instalar un servidor FTP con usuarios virtuales en linux, aunque este mecanismo se viene utilizando hace unos años no deja de ser efectivo y cumplir su proposito. Ahora te preguntaras porque usuarios virtuales? la respuesta es bien simple, para no comprometer la seguridad del sistema operativo :)

Sin mas, nos ponemos manos a la obra:



REQUISITOS:
- Sistema Operativo GNU/Linux en cualquier variante.
- MySQL Server (Sino lo tienes descargate el Community Server desde la web de Oracle).
- libpam-mysql
- Vsftpd
- Vim
- Ssh

Asumire que tienes acceso al servidor MySQL con privilegios de administrador, ya que es requerido. De igual manera asumire que tienes todos esos paquetes mencionados ya instalados (A excepcion del VSFTPD este lo instalaras mas adelante), en caso que no, procura cumplir todos estos requisitos descargandolos acorde  a tu distribucion linux por su manejador de paquetes correspondientes.


Si la distribucion linux que utilizas es Slackware, descarta este mini-tutorial ya que para proceder se necesita que el sistema autentifique a los usuarios mediante PAM y Slackware no tiene ni utiliza PAM. Si utilizas otra distribucion linux, continua:

Ahora, create un archivo de texto he introduce toda la sentencia siguiente :

# Creo al usuario vsftpd para que puedan entrar a la base de datos de usuarios y que solo pueda ·realizar consultas, no necesitara hacer nada mas.
#
USE mysql;
INSERT INTO user (Host, User, Password) VALUES ('localhost','vsftpd',password('PONAQUITUPASSWORD'));

INSERT INTO db (Host, Db, User, Select_priv) VALUES ('localhost','vsftpd','vsftpd','Y');
FLUSH PRIVILEGES;
#
# Creamos la base de datos vsftpd
#
CREATE DATABASE vsftpd;

#
# Creamos la estructura de la tabla usuarios
#
USE vsftpd;
CREATE TABLE `usuarios` (
  `usuario` varchar(20) NOT NULL default '',
  `password` varchar(20) NOT NULL default ''
);


Ya creado el archivo, procederas a pasarlo como parametro a la base de datos para que se ejecute.

root@localhost# mysql -u root -p < /cosas/tu_archivo_de_texto.txt

 Nos pedirá la password de root de MySQL para poder acceder al gestor de la base de datos.

 Una vez finalizado el proceso, verificaremos que todo se ha hecho de manera correcta:

root@localhost# mysql -u root -pEnter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13 to server versión: 5.0.24_Debian-10sarge2-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use vsftpd;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> desc usuarios;
———- ————– —— —– ——— ——-
| Field    | Type         | Null | Key | Default | Extra |
———- ————– —— —– ——— ——-
| usuario  | varchar(255) |      |     |         |       |
| password | varchar(255) |      |     |         |       |
———- ————– —— —– ——— ——-
2 rows in set (0.00 sec
)

  
 INSTALACION DEL SERVIDOR VSFTPD
Bien, hasta este instante y si todo ha salido bien, nos toca instalar y configurar el demonio Vsftpd. Pero antes de instalar el Vsftpd es preciso crear un usuario en el sistema para que sea bajo este que el demonio Vsftpd se ejecute:

 root@localhost# useradd -d /var/www  fantasmita

 Para comprobar si la creacion fue satisfactoria, basta con ejecutar:
 root@localhost#   cat /etc/passwd  | grep "fantasmita"

Si el usuario fue creado debe retornarte una linea similar a la siguiente:
fantasmita:x:1001:100::/var/www:/bin/false

Antes de indicarte la instalacion del VSFTPD  tendras que saber donde tendras los directorios del FTP, supongamos que quieres montar el servidor FTP para usuarios que tengan un website en tu  GNU/Linux, por lo que utilizare como ejemplo el HOME por defecto del servidor web Apache /var/www/, y si definimos como HOME del Vsftpd esa misma ubicacion, los usuarios del FTP tendran sus directorios dentro de este, por ejemplo si tienes un usuario llamado Pepe su directorio HOME del ftp sera  /var/www/pepe, si tienes un usuario llamado Carlos su directorio HOME del ftp sera /var/www/carlos, etc. Claro esta puedes elegir el HOME del ftp que quieras, no es mandatorio que sea el de Apache /var/www/ , pero en este ejemplo reflejare toda la configuracion utilizando este directorio.

Ahora procede a instalar el demonio de VSFTPD en tu sistema. Una vez realizado, necesitaras conectarte a la base de datos:
root@localhost#   mysql  -u  root  -p

 Una vez dentro ejecutar la siguiente consulta SQL:
use vsftpd;
INSERT INTO usuarios (usuario, password) VALUES ('Chupete',password('Chupetin'));


Luego no te olvides de verificar que el usuario se creo:

 mysql> use vsftpd;
mysql> select * from usuarios; ——— ——————
| usuario | password         |
——— ——————
| Chupete  | 76143fba05a82082 |
——— ——————
1 row in set (0.00 sec)



Hora de configurar el archivo correspondiente al VSFTPD que validara al usuario:

vi /etc/pam.d/vsftpd

Borraremos todo su contenido para dejarlo de la siguiente forma:
auth required /lib/security/pam_mysql.so user=vsftpd passwd=PASSWORDQUEPUSISTE host=localhost db=vsftpd table=usuarios usercolumn=usuario passwdcolumn=password crypt=2

account required /lib/security/pam_mysql.so user=vsftpd passwd=PASSWORDQUEPUSISTE host=localhost db=vsftpd table=usuarios usercolumn=usuario passwdcolumn=password crypt=2

session required /lib/security/pam_mysql.so user=vsftpd passwd=PASSWORDQUEPUSISTE host=localhost db=vsftpd table=usuarios usercolumn=usuario passwdcolumn=password crypt=2


El password que debes colocar ahi, es el mismo password que insertaste dentro de la base de datos, en nuestro caso 'Chupetin' . Ahora vas a configurar el archivo de Vsftpd:
 
mv /etc/vsftpd.conf /etc/vsftpd.conf.ORIGINAL
 vi /etc/vsftpd.conf

Tienes que dejar el archivo justo como lo presento aca:

ftpd_banner= “Servidor FTP  De La Empresa Loquesea O Lo Que Gustes Colocar Aca Como Bienvenida

# Configuracion Base

anonymous_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=fantasma
hide_ids=YES
listen=yes
listen_address=0.0.0.0
listen_port=21
local_enable=YES
max_clients=100
max_per_ip=1
pam_service_name=vsftpd
pasv_max_port=65535
pasv_min_port=64000
#session_support=NO
use_localtime=YES
user_config_dir=/etc/vsftpd/users
userlist_enable=YES
userlist_file=/etc/vsftpd/denied_users
virtual_use_local_privs=YES
xferlog_enable=YES
async_abor_enable=YES
connect_from_port_20=YES
dirlist_enable=NO
download_enable=NO
local_umask=000


Aclaracion al respecto, con la configuracion anterior no se permitiran las conexiones anonimas, el puerto por defecto indicado es el 21 y que los puertos pasivos iran desde el 65535 al 6400. Si no te conviene este tipo de configuracion, porfavor editar a lo que mas comodo te quede. 

Tiempo de crear las configuraciones de cada usuario de la base de datos,

mkdir /etc/vsftpd

No te olvides de crear el archivo de usuarios denegados al sistema mediante el FTP, ya que con este archivito no permitiras que ningun usuario fisico del servidor se pueda loguear al FTP, con este archivo solo permitiras que se logueen al servidor aquellos usuarios virtuales que esten dentro de la base de datos MySQL.


cat /etc/passwd | cut -d “:” -f 1 | sort > /etc/vsftpd/denied_users

Para crear las configuraciones de los usuarios, generaremos un archivo por cada usuario de la base de datos, en mi caso creare el archivo llamado Chupete:vsftpd:/# mkdir /etc/vsftpd/users/

vsftpd:/# vi /etc/vsftpd/users/Chupete
dirlist_enable=YES
download_enable=YES
local_root=/var/www/Chupete/
write_enable=YES
anon_world_readable_only=NO


 En este caso, si el usuario Chupete se loguea , su home seria /var/www/Chupete y este usuario solamente podra movilizarse por los directorios hijos de  /var/www/Chupete.  

Lo que hace falta ahora, es la otorgacion de permisos a la carpeta de cada usuario virtual:

chmod 777 -R  /var/www/Chupete/

Ya realizado todo el proceso anterior, tendremos un servidor FTP en plena funcionalidad con exclusivo y unico acceso de usuarios virtuales.

 


2 comentarios:

  1. he hecho todos los pasos y no me funciona, vamos esta el servidor activo y se ve en la red pero no deja acceder a nadie
    configuraciones:
    #vi /etc/pam.d/vsftpd
    #-- Standard behaviour for ftpd(8).
    # auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed

    #--Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.

    #--Standard pam includes
    # @include common-account
    # @include common-session
    # @include common-auth
    # auth required pam_shells.so


    auth required /lib/security/pam_mysql.so user=vsftpd passwd=[he puesto la de la base de datos eso es correcto?] host=localhost db=vsftpd table=usuarios usercolumn=usuario passwdcolumn=password crypt=2

    account required /lib/security/pam_mysql.so user=vsftpd passwd=[he puesto la de la base de datos eso es correcto?] host=localhost db=vsftpd table=usuarios usercolumn=usuario passwdcolumn=password crypt=2

    session required /lib/security/pam_mysql.so user=vsftpd passwd=[he puesto la de la base de datos eso es correcto?] host=localhost db=vsftpd table=usuarios usercolumn=usuario passwdcolumn=password crypt=2

    # vi etc/vsftpd.conf
    ftpd_banner=Bienvenido al servidor FTP de DJ Ras

    # Configuracion Base
    listen_port=21
    # max_clients=20

    max_per_ip=5
    # pasv_max_port=65535
    # pasv_min_port=64000
    #session_support=NO
    # userlist_enable=YES
    # userlist_file=/etc/vsftpd/denied_users
    # no activado por seguridad async_abor_enable=YES
    # dirlist_enable=NO
    # download_enable=NO
    # local_umask=000

    listen=YES
    anonymous_enable=YES
    local_enable=YES
    # write_enable=YES
    dirmessage_enable=YES
    use_localtime=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    idle_session_timeout=1800
    data_connection_timeout=7200
    chroot_local_user=YES
    secure_chroot_dir=/var/run/vsftpd/empty
    anon_upload_enable=NO
    anon_mkdir_write_enable=NO
    anon_other_write_enable=NO
    force_dot_files=NO
    #
    tcp_wrappers=YES
    #
    listen_address=0.0.0.0
    anon_max_rate=0
    local_max_rate=0
    delete_failed_uploads=YES
    listen_port=21
    hide_ids=YES
    pam_service_name=vsftpd
    nopriv_user=vsftpd
    guest_enable=YES
    guest_username=vsftpd
    user_sub_token=$USER
    virtual_use_local_privs=YES
    user_config_dir=/etc/vsftpd/users
    local_umask=777
    #ftp_username=


    pasv_max_port=65535
    pasv_min_port=65000
    #peligroso
    async_abor_enable=YES

    configuracion usuario:
    dirlist_enable=YES
    download_enable=YES
    #disco externo por usb con automontado en el inicio de ubuntu 12.04
    local_root=/media/Expansion Drive/descargas torrent
    write_enable=NO
    anon_world_readable_only=NO

    ResponderEliminar