Herramientas de usuario

Herramientas del sitio


doc:freebsd:servicios006

Proftpd en FreeBSD

Autor: ACMhUnTeR

Fecha: 14/07/2005

Plataforma: FreeBSD 4.11-STABLE y 5.4-STABLE

El documento puede ser copiado, modificado, redistribuido, con la unica condicion de hacer mencion al autor y la url original del documento (eldemonio.org y bsd.org.pe) como de las personas que colaboraron en el mismo.

INTRODUCCIÓN

Explicaremos la manera de como configurar un servidor FTP utilizando Proftpd como demonio, utilizaremos el soporte para MySQL o PostgreSQL de Proftpd para manejar las cuentas de los usuarios y desligarlos totalmente de las cuentas existentes en el sistema.

INSTALANDO NUESTROS PAQUETES

Instalando MySQL

Procedemos a instalar desde nuestro arbol de ports MySQL

HellFire# cd /usr/ports/databases/mysql40-server && make install clean clean-depends

O utilizando los binarios

HellFire# pkg_add -r mysql40-server

Instalando PostgreSQL

Procedemos a instalar desde nuestro arbol de ports PostgreSQL, no olvidar marcar en las opciones el soporte para pgsql

HellFire# cd /usr/ports/databases/postgresql80-server && make install clean clean-depends

O utilizando los binarios

HellFire# pkg_add -r postgresql80-server

Instalando Proftpd

Instalaremos proftpd con soporte para MySQL usamos nuestro arbol de ports

HellFire# cd /usr/ports/ftp/proftpd-mysql && make install clean clean-depends

Si elegimos instalar proftpd con soporte para PostgreSQL usamos nuestro arbol de ports

HellFire# cd /usr/ports/ftp/proftpd && make install clean clean-depends

CONFIGURANDO NUESTRO SERVIDOR FTP

Configurando MySQL

Iniciamos MySQL

HellFire# echo 'mysql_enable="YES"' >> /etc/rc.conf
HellFire# sh /usr/local/etc/rc.d/mysql-server.sh start

Asigamos una contraseña al usuario root cuando nos pida el ingreso de una contraseña solo presionamos enter.

HellFire# mysqladmin -u root -p password nuevopassword

Para la informacion de las cuentas de nuestro servidor ftp utilizaremos MySQL, para esto necesitamos crear una base de datos y su respectiva tabla.

HellFire# ee /root/proftpd-mysql.sql
#
# Creamos la base de datos que usara nuestro servicio proftpd
#
CREATE DATABASE proftpd;
USE proftpd;
#
# Estructura de la tabla que contendra información de nuestro usuarios
#
CREATE TABLE proftpd_users (
  userid varchar(32) NOT NULL default '',
  passwd varchar(32) NOT NULL default '',
  uid smallint(6) NOT NULL default '65534',
  gid smallint(6) NOT NULL default '65534',
  homedir varchar(255) NOT NULL default '',
  shell varchar(16) NOT NULL default '/sbin/nologin',
  count int(11) NOT NULL default '0',
  accessed datetime NOT NULL default '0000-00-00 00:00:00',
  modified datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  ("userid")
) TYPE=MyISAM COMMENT='ProFTP user table';
#
# Ingresamos un usuario de prueba
#
INSERT INTO proftpd_users VALUES ('ProftpdUser','ProftpdPass',65534,65534,'/home/proftpd/ProftpdUser/','/sbin/nologin',0,'','');
#
# Creamos el usuario que tendran acceso a las tablas con sus respectivos permisos
#
INSERT INTO user (Host, User, Password) VALUES ('localhost','proftpd_user_db',password('proftpd_pass_db'));
INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv) VALUES ('localhost', 'proftpd', 'proftpd_user_db', 'Y', 'Y', 'Y', 'Y');
FLUSH PRIVILEGES;
GRANT USAGE ON proftpd.* TO proftpd_user_db@localhost;
GRANT SELECT, INSERT, DELETE, UPDATE ON proftpd.* TO proftpd_user_db@localhost;
#

Grabamos los cambios a nuestro archivo proftpd-mysql.sql y ejecutamos

# mysql -u root -pContraseña_de_root_en_mysql < /root/proftpd.sql

Configurando PostgreSQL

Iniciamos el espacio donde se crearan nuestras base de datos en PostgreSQL

HellFire# echo 'postgresql_enable="YES"' >> /etc/rc.conf
HellFire# sh /usr/local/etc/rc.d/010.pgsql.sh initdb
HellFire# sh /usr/local/etc/rc.d/010.pgsql.sh start

Asignamos un password al usuario pgsql

HellFire# su pgsql
# psql template1
Bienvenido a psql 8.0.3, el terminal interactivo de PostgreSQL.
Digite:  \copyright para ver los términos de distribución
         \h para obtener ayuda sobre comandos SQL
         \? para obtener ayuda sobre comandos internos
         \g o punto y coma (;) para ejecutar consulta
         \q para salir

template1=# ALTER USER pgsql WITH ENCRYPTED PASSWORD 'password';
template1=# \q

Configuramos permisos de acceso local a PostgreSQL utilizando contraseñas md5.

HellFire# ee /usr/local/pgsql/data/pg_hba.conf
# "local" is for Unix domain socket connections only
local   all         all                               md5
# IPv4 local connections:
host    all         all         127.0.0.1/32          md5

Reiniciamos PostgreSQL

HellFire# sh /usr/local/etc/rc.d/010.pgsql.sh restart

Para la informacion de las cuentas de nuestro servidor ftp utilizaremos PostgreSQL, para esto necesitamos crear la base de datos y la tabla que utilizaremos.

HellFire# ee /root/proftpd-pgsql.sql
 --
 -- Creamos la base de datos proftpd
 --
CREATE DATABASE proftpd;
--
-- Creamos el usuario proftpd
--
CREATE USER proftpd_user_db ENCRYPTED PASSWORD 'proftpd_pass_db';
--
-- Nos conectamos a la base de datos proftpd
--
\c proftpd;
--
-- Estructura de la tabla que contendra información de nuestro usuarios
--
CREATE TABLE proftpd_users (
  userid character varying(32) NOT NULL default '',
  passwd character varying(32) NOT NULL default '',
  uid integer NOT NULL default '65534',
  gid integer NOT NULL default '65534',
  homedir character varying(255) NOT NULL default '',
  shell character varying(16) NOT NULL default '/sbin/nologin',
  count integer NOT NULL default '0',
  accessed timestamp with time zone default now(),
  modified timestamp with time zone default now(),
  PRIMARY KEY ("userid")
);
COMMENT ON TABLE proftpd_users IS 'Usuarios Proftpd'; 
--
-- Ingresamos un usuario de prueba para ingresar a nuestro servidor ftp
--
INSERT INTO proftpd_users VALUES ('ProftpdUser','ProftpdPass',65534,65534,'/home/proftpd/  ProftpdUser/','/sbin/nologin',0,'now()','now()');
--
-- Asignamos privilegios para la base de datos
--
GRANT SELECT,INSERT,UPDATE,DELETE ON proftpd_users TO proftpd_user_db;

Ejecutamos las sentencias de nuestro archivo proftpd-pgsql.sql en nuestro PostgreSQL

HellFire# su pgsql
# psql template1
Bienvenido a psql 8.0.3, el terminal interactivo de PostgreSQL.
Digite:  \copyright para ver los términos de distribución
         \h para obtener ayuda sobre comandos SQL
         \? para obtener ayuda sobre comandos internos
         \g o punto y coma (;) para ejecutar consulta
         \q para salir

template1=# \i proftpd-pgsql.sql
template1=# \q

Configurando Proftpd

Procedemos a configurar Proftpd editamos su archivo de configuracion /usr/local/etc/proftpd.conf y agregamos o modificamos

# ee /usr/local/etc/proftpd.conf
# Descripcion de Nuestro Servidor
ServerName                      "HellFire ProFTPD Server"

# Tipo si es ejecutado como demonio o por el demonio inetd
ServerType                      standalone

# Atiende todas las peticiones
DefaultServer                   on

# Puerto que utilizara para las peticiones
Port                            21

# Mascara para la creacion de Directorios y Archivos
Umask                           022

# Ruta de nuestro archivo Scoreboard que mantiene informacion de las sessiones iniciadas
ScoreboardFile /var/run/proftpd.scoreboard

# Maximo numero de procesos hijos que se pueden expandir
MaxInstances                    30

# Usuario y Grupo que ejecutara el demonio de Proftpd
User                            nobody
Group                           nogroup

# Creara una especie de jaula para que los usuarios solo puedan moverse dentro de su   directorio asigando
DefaultRoot ~

# Tipo de autentificacion usado con MySQL o PostgreSQL
SQLAuthTypes            	Plaintext Crypt
SQLAuthenticate         	users

# Ubicacion, usuario y contraseña que tiene acceso a la tabla proftpd de nuestro MySQL o   PostgreSQL
SQLConnectInfo  		proftpd_users@localhost proftpd_user_db proftpd_pass_db

# Seleccionamos la informacion que solicitaremos de la tabla proftpd_users
SQLUserInfo     		proftpd_users userid passwd uid gid homedir shell

# Usuario y Grupo por defecto para la creacion de carpetas y archivos
SQLDefaultGID                   65534
SQLDefaultUID                   65534
SQLMinUserGID                   100
SQLMinUserUID                   500

# Si los usuarios son nuevos automaticamente se creara su respetivo homedir en su primer ingreso al servidor
SQLHomedirOnDemand on

# Actualiza informacion de fecha de ingreso y numero de veces que se a ingresado al servidor por usuario
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" proftpd_users
SQLLog  STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" proftpd_users

# No permite el ingreso de usuario root
RootLogin off

# No requiere un Valid Shell en el sistema
RequireValidShell off

# Deniega la utilizacion de chmod para el cambio de permisos
<Limit SITE_CHMOD>
  DenyAll
</Limit>

Listo solo nos queda levantar el servicio de proftpd

HellFire# /usr/local/libexec/proftpd & 

Para asegurarnos que Proftpd se ejecute al inicio agregamos la siguiente linea a /etc/rc.conf

proftpd_enable="YES"

Y por ultimo, no olvidemos crear el directorio que contendra los directorios de nuestros usuarios

HellFire# mkdir /home/proftpd
HellFire# chown -R nobody:nogroup /home/proftpd

FINALES

Bueno a disfrutar el servidor FTP , Proftpd es un demonio excelente y sobre todo no tiene problemas de seguridad muy amenudo como otros, con una infinidad de caracteristicas es recomedable darle una revisada a la documentacion publicada en la pagina de Proftpd, cualquier duda, comentario, pueden mandarlo a mi correo, tratare de extender el documento con la instalacion de algun sistema ftp web en la proxima actualizacion, para los interesados un sistema ftp-web muy bueno phpWebFtp

doc/freebsd/servicios006.txt · Última modificación: 2022/03/02 08:18 (editor externo)