Servidor Ftp proFTPD
José Domingo Mu ñoz Rodríguez <
[email protected]>
Alberto Molina Coballes <
[email protected]>
23 de septiembre de 2006
Resumen
En este documento vamos a explicar los pasos para instalar, configurar y
poner en funcionamiento el servidor ftp proFTPD. La utilización del servi-
dor ftp nos va permitir la gstión de forma remota de los sitios web creados
anteriormente. Nos vamos a centrar en la utilización de usuarios virtuales
cuya información vamos a guardar en una base de datos MySQL.
cJosé Domingo Mu ñoz Rodríguez y Alberto Molina Coballes. Algunos De-
rechos reservados.
Esta obra está bajo una licencia Attribution-ShareAlike 2.5 de Creative Com-
mons. Para ver una copia de esta licencia, visite:
http://creativecommons.org/licenses/by-sa/2.5/
1
1.
Introducción al servidor Ftp proFTPd
ProFTPd es un servidor FTP. Se promociona desde su página web como es-
table y seguro, cuando se configura correctamente. El servidor ProFTPd se pro-
mociona a sí mismo como un “Software servidor FTP altamente configurable con
licencia GPL” (Highly configurable GPL-licensed FTP server software).
2.
Instalación de MySQL
Como medida de seguridad vamos a utilizar usuarios virtuales para el acceso
a los ficheros mediante el protocolo ftp. Normalmente el servidor proFTPD uti-
liza los usuarios reales del sistema para el acceso a los archivos, pero esto puede
dar problemas de seguridad. Utilizando usuarios virtuales evitamos, entre otras
cosas, que si un usuario malicioso logra una cuenta FTP, tenga menos posibilida-
des de entrar en nuetro sistema.
Normalmente la información de los usuarios virtuales se guarda en un fichero
de texto plano, nosotros vamos a explicar la configuración del servidor para guar-
dar la información de los usuarios virtuales en una base de datos construida en
MySQL. Para instalar el servidor de base de datos MySQL utilizamos el comando
apt-get:
apt-get install mysql-server
Durante el proceso de intalación se bajarán e instalarán todos los paquetes para
que funcione MySQL. Una vez terminado la instalación, lo primero que tenemos
que hacer es cambiar la contrase ña al usuario root de MySQL:
mysqladmin -u root password nueva_password
3.
Instalación de proFTPd
Para instalar el servidor proFTPD, utilizamos el comando apt-get de la si-
guiente forma:
apt-get install proftpd
Durante la instalación debemos escoger la forma en que se va ejecutar este ser-
vicio, si lo hará bajo inetd o en forma independiente (como un proceso más). La
diferencia entre ambos métodos es la velocidad de ejecución que se obtendrá del
servicio y la carga que se le dará al equipo. Utilizando inetd el equipo iniciará un
proceso nuevo por cada petición ftp que llegue al equipo, mientras que ejecutándo-
se en forma independiente, el proceso ya esta inicializado por lo que no hay nece-
sidad ejecutar un nuevo programa (simplemente se clona el proceso, generando
una nueva instancia del mismo para atender al cliente ftp que inicio el requeri-
miento). Nosotros escogeremos la opción independiente.
4. Creación de la base de datos
ProFTPD, de forma normal, valida sobre el /etc/passwd y /etc/shadow,
por tanto necesita una tabla que simule los datos contenidos en estos ficheros.
2
También utiliza el /etc/group, por lo que necesitamos otra tabla del mismo
modo:
Tabla de usuarios:
username:Nombre del usuario
password: Contrase ña del usuario
uid: Identificador del usuario
gid: Identificador del grupo al que pertenece el usuario
homedir: Directorio donde tendrá acceso el usuario
activa: Ete campo lo usamos para activar y desactivar cuentas sin borrar el
usuario1
Tabla de grupos:
groupname: Nombre del grupo
gid: Identificador del grupo
members: Nombres de los usarios que pertenecen a este grupo
Como se puede ver es todo muy similar al /etc/passwd y /etc/group. Ahora
vamos a ver las instrucciones SQL para crear estas tablas.
Lo primero, creamos la base de datos que vamos a utilizar. Accedemos como
root:
debian:/home/jose\# mysql -u root -p
password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9 to server version: 5.0.24-Debian_1-log
Type ’help;’ or ’\h’ for help. Type ’\c’ to clear the buffer.
mysql> create database ftpd;
Query OK, 1 row affected (0.05 sec)
Ahora generamos un usuario que acceda a la base de datos, para no utilizar el
usuario root:
mysql> GRANT ALL ON ftpd.{*} TO proftpd@localhost
IDENTIFIED BY "nueva_contraseña";
\\
Query OK, 0 rows affected (0.09 sec)
Es decir, hemos creado un nuevo usuario (proftpd) que se va a conectar desde
localhost, tiene permiso en todas las tablas de la base de datos que hemos creado
anteriormente y cuya contrase ña es “nueva contrase ña”. Este es el usuario que
utilzaremos para crear las tablas anteriormente descritas:
1Este campo no es necesario, pero lo vamos autilizar para tener una forma sencilla de activar
o desactivar los usuarios ftp. Se puede poner el valor que queramos, nosotros vamos a utilizar el
1 para indicar usuario activo u 0 para desactivar el usuario.
3
debian:/home/jose\# mysql -u proftpd -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9 to server version: 5.0.24-Debian_1-log
Type ’help;’ or ’\h’ for help. Type ’\c’ to clear the buffer.
mysql> show databases;
+--------------------+
| Database
|
+--------------------+
| information_schema |
| ftpd
|
+--------------------+
2 rows in set (0.00 sec)
mysql> use ftpd;
Database changed
mysql> show tables;
Empty set (0.00 sec)
Hemos entrado con el usuario creado anteriormente, hemos visualizados las ba-
ses de datos, hemos indicado que la base de datos que vamos a utilizar es ftpd y
hemos mostrado las tablas, que como podemos observar no hay ninguna. Esta-
mos preparados para crear las tablas:
CREATE TABLE usuarios (
username char(12) NOT NULL,
password char(100) NOT NULL,
uid int(6) default NULL,
gid int(6) default NULL,
homedir char(50) default NULL,
shell char(20) default NULL,
activa tinyint(4) default ’1’ )
TYPE=MyISAM;
CREATE TABLE grupos (
groupname varchar(20) NOT NULL,
gid int(6) NOT NULL default ’65534’,
members longtext )
TYPE=MyISAM;
Veamos las tablas que hemos creado y su estructura:
mysql> show tables;
+----------------+
| Tables_in_ftpd |
+----------------+
|
| grupos
| usuarios
|
4
+----------------+
2 rows in set (0.00 sec)
| Type
mysql> describe usuarios;
+----------+------------+------+-----+---------+-------+
| Field
| Null | Key | Default | Extra |
+----------+------------+------+-----+---------+-------+
|
| username | char(12)
| NO
| password | char(100) | NO
|
| YES
|
| uid
| YES
|
| gid
| YES
| homedir | char(50)
|
|
| char(20)
| shell
| YES
| activa
| tinyint(4) | YES
|
+----------+------------+------+-----+---------+-------+
7 rows in set (0.06 sec)
|
|
| NULL
| NULL
| NULL
| NULL
| 1
| int(6)
| int(6)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Type
mysql> describe grupos;
+-----------+-------------+------+-----+---------+-------+
| Field
| Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
|
| groupname | varchar(20) | NO
| gid
| NO
|
| members
|
| YES
+-----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
|
| 65534
| NULL
| int(6)
| longtext
|
|
|
|
|
|
5. Configuración del servidor ProFTPd
La configuración del servidor proFTPd está en le fichero /etc/proftpd.conf,
la sintaxis que utiliza es parecida a la utilizada en apache, por lo que el usuario
acostumbrado a configurar apache le resultará familiar. La configurtación que
viene por defecto en el fichero nos viene bien, lo único que vamos a hacer es in-
troducir nuevas directivas para que el servidor proFTPd valide los usuarios utili-
zando la información guardada en nuestra base de datos MySQL. Las directivas
que vamos a introudcir en el fichero de configuración son las siguientes:
AuthPAM off : Para deshabilitar la autentificación PAM, es decir para que no
autentifique a los usuarios reales.
RequireValidShell off : Requiere una Shell válida para iniciar sección. Las shell
válidas son las que estan en /etc/shells.
DefaultRoot ˜: Para que cuando un usuario entra en el servidor ftp, no pueda
salir de su home a drectorios superiores.
Y por último nos queda las directivas de configuración para que proFTPd auten-
tifique los usarios virtuales cuya información vamos a guardar en las tablas de
nuestra base de datos. Antes de ver las directivas vamos a explicar cada una de
ellas:
SQLBackend: Con esta directiva indicamos el servidor de base de datos que
vamos a utilizar. En nuestro caso mysql.
5
SQLAuthTypes: En tipos de identificacion tenemos (entre otras) PlainText
(texto plano), Crypt (como en el /etc/shadow) o Backend (utiliza el sistema
propio de la base de datos). Aquí depende de con qué vayamos a cifrar las
contrase ñas en la base de datos. Si lo haces con CRYPT() usa Crypt, si usas
PASSWORD() usa Backend.
SQLAuthenticate: Con esta directiva decimos quien tiene que identificarse
en MySQL. Podemos seleccionar grupos o usuarios, yo me limito a decir
que todos: on.
SQLConnectInfo: Se indica los datos de la conexión a la base de datos. ba-
se de datos@host usuario contrase ña
SQLDefaultGID y SQLDefaultUID: Indican, respectivamente, los GID y UID
que se usan por defecto en caso de no poner nada en la tabla.
SQLMinUserGID y SQLMinUserUID: Indican el UID y el GID mínimo que
han de tener los usuarios para poder loguear.
SQLGroupInfo: Se indica el nombre de la tabla que posee la información de
los grupos, así como los nombres de los campos.
SQLUserInfo: Se indica el nombre de la tabla que posse la información de los
usuarios, así como los nombres de los campos2.
SQLUserWhereClause: Indica una condición a la hora de seleccionar los cam-
pos. Nosotros la usamos para controlar si una cuenta está activa o no3.
SQLLogFile: Se indica el archivo de log donde se guar
Comentarios de: Servidor Ftp proFTPD (0)
No hay comentarios