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.
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.
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
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
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
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
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
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
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