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=YESasync_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.
Suscribirse a:
Enviar comentarios (Atom)
Para que quieres el ssh?
ResponderEliminarhe 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
ResponderEliminarconfiguraciones:
#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