Configurar ProFTPd
Introduccion:
Configuracion y ejecución de un servidor ftp mediante ProFTPd. Se ha elejido este
programa porque es posiblemente el que mas opciones de configuracion
tenga.
1.Software y Instalacion:
ProFTPd
source: las sources del servidor que vamos a usar.
Acontinuacion deberemos de desempaquetar el programa y configurarlo:
# tar xvfz proftpd-1.2.8p.tar.gz
# cd proftpd-1.2.8p
# ./configure
--with-modules=mod_auth:mod_core:mod_log:mod_ls:mod_cap:mod_ls:mod_readme:mod_rewrite
# make
# make install
Si usamos Free BSD deberemos de
omitir el ./configure y el make.
Si se dispone de Gentoo unicamente deberemos de emergerlo:
#emerge proftpd
Si usamos Debian:
#apt-get install proftpd
2.Configuracion:
El ProFTPd se configura mediante la edicion del archivo proftpd.conf
que se encuentrar en dos sitios: /usr/local/etc/proftpd.conf o
/etc/proftpd.conf. En el caso que usemos gentoo se encontrara en
/etc/proftpd/proftpd.conf.
Luego tendremos que escoger como queremos ejecutar el ProFTPd
standalone o inetd, en nuestro caso escogeremos standalone. Si se tiene
alguna duda sobre cual escoger es recomendado que leais el siguiente articulo.
Ahora deberemos de crear el directorio donde vamos a tener el ftp,
nosotros usaremos el direcorio /home/ftp. Si ademas se quiere usar una
carpeta donde los usuarios puedan subir cosas al ftp usaremos el
directorio /home/ftp/subit. Recordar que cada uno puede usar el que
quiera, pero recordar que el directorio de subir debe de estar dentro
del directorio del ftp, o como maximo ser el directorio de ftp el
directorio de subida(esto se suele usar para ftp de subida unicamente):
# su
# mkdir /home/ftp
# mkdir /home/ftp/subir
# chmod 755 /home/ftp
# chmod 777 /home/ftp/subir
Ahora deberemos de configurar el archivo proftpd.conf:
# vim /etc/proftpd.conf *como hemos dicho arriba el lugar donde
se encuentre el fichero puede variar, se puede usar otro editor que no
sea el vim.
El archivo de configuracion que usaremos sera el siguiente:
ServerName
"Nombre_del_servidor_ftp" #Pondremos el que queramos, Servidor FTP
es un ejemplo
ServerType
standalone/inetd
#Nosotros usaremos standalone en vez de
inetd
DeferWelcome off/on
#En nuestro caso
pondremos off ya que no
queremos mostrar ningun mensage de entrada
ServerIdent
on/off "nombre"
#Usaremos on "nombre", en nombre sed originales y no pongais
algo como Debian Ftp Server, o Gentoo Roolz
MultilineRFC2228
on/off
#Usaremos
on, ya que esto hara que
nuestro servidor ftp sea compatible con casi todos los clientes ftp
DefaultServer
on/off
#Usaremos on, toma las opciones
defualt de un servidor ftp
ShowSymlinks
on/off
#Usaremos on, podremos ver los
links, si el link esta fuera de nuestro home no tendremos acceso a
él
AllowOverwrite
on/off
#Usaremos off, permite
sobreescribir ficheros existentes
TimeoutNoTransfer
<numero>
#el numero es el maximo numero de segundos que puede estar
un cliente en el ftp, sin transferencia de informacion ej: 600
TimeoutStalled
<numero>
#el numero maximo de segundos que puede estar
cliente-servidor sin recibir informacion de una transferencia(atascado)
ej: 90
TimeoutIdle
<numero>
#el numero maximo de segundos
que puedes estar un usuario sin hacer nada ej: 200
DenyFilter
\*.*/
#Es un filtro
de proteccion para el ProFTPd
Port
<numero>
#Usaremos el
21, ya que es el numero de puerto
predeterminado
MaxInstances
<numero>
#numero de
conexiones al ftp que se pueden hacer a la vez(cuidado con los DOS) ej:
2
User
nobody
Group
nogroup
AccessGrantMsg
"mensage"
#El mensage sera mostrado si la
conexion del usuario ha sido correcta(el user y password ha sido el
correcto)
AccessDenyMsg
"mensage"
#El mensage sera mostrado si la
conexion del usuario ha sido incorrecta, usar un mensage "amenazador"
LogFormat
default "%h %l %u %t \"%r\" %s
%b"
#Con LogFormat [nombre_formato]
"formato", el nombre_formato se lo ponemos nosotros
LogFormat
auth "%v [%P] %h %t \"%r\"
%s"
#para ser usado despues con
ExtendedLog
LogFormat
write "%h %l %u %t \"%r\" %s
%b"
TransferLog
/var/log/proftpd/transfer
#Loguea las
transferencias que se realice con el servidor
ExtendedLog /var/log/proftpd.down_up_log
WRITE,READ write #ExtendedLog es para loguear con una serie
de caracteristicas
ExtendedLog
/var/log/proftpd.auth_log AUTH
auth
#ExtendedLog
[lugar_donde_se_guarda_el_log] [Que_logear] [nombre_formato]
ExtendedLog /var/log/proftpd.paranoid_log
ALL default
#WRITE(escritura),READ(lectura),AUTH(autentificacion,
logging) y ALL(todo)
DefaultRoot ~
#Con esto hacemos chroot en el home de
nuestro usuario, es decir, no permitiremos que pueda subir mas
directorios
AuthUserFile
"/etc/passwd" #Le decimos donde tenemos el archuvo de
los usuarios
AuthGroupFile
"/etc/group"
#Le decimos donde tenemos el archivo
de los grupos
MaxClients
<numero> "mensage" #Maximo numero de clientes que pueden
estar a la vez en en servidor ej: MaxClients 6 "Max %m
usuarios"
MaxClientsPerHost
<numero> "mensage" #Maximo numero de clientes por Host(ip)
ej: MaxClientsPerHost 2 "Solo 2 conexiones por HOST"
MaxClientsPerUser
<numero> "mensage" #Maximo numero de clientes por
usuario ej: MaxClientsPerUser 2 "Solo 2
conexiones por usuario"
#El mensage aparece cuando superamos el
numero permitido
RequireValidShell
off
#los usuarios no requieren, ni deben, de
tener una shell "autentica"
Hasta aqui hemos configurado las opciones del servidor, pero ahun no le
hemos dicho donde esta el directorio del ftp, y que permisos tenemos
sobre ese directorio. Antes de ello tenemos que decidir si deseamos
tener un ftp unicamente anonimo, un ftp con cuentas pricadas o un ftp
con cuentas privadas y la cuenta de anonimo. Yo no recomiendo usar la
cuenta anonimo, ya que, si la teneis cualquier persona de fuera podra
acceder a él, claro esta, si no usamos un firewall, como por
ejemplo las iptables. Tambien podemos decirle al ftp de quien puede
aceptar conexion o de quien no. Una
vez decidido, seguimos con la edición del archivo proftpd.conf:
Denegar acceso a ciertas ip, esto es opcional, yo no lo uso
<Limit
LOGIN>
#Limitamos a
quienes pueden intentar loguearse en el servidor
Order
deny,allow
#en
esta etiqueta le decimos el orden de lectura de la informacion,
1ºleere a quien denegamos y 2º a quien aceptamos
Deny from
.pepito.com, xxx.xxx.xxx.xxx #La etiqueta Deny marca los
host que queremos rechazar separados por una coma
Allow from
all
#La etiqueta Allow es de quien vamos aceptar, en este caso all que
representa a todas las ip's
</Limit>
Ahora decidiremos si queremos un ftp anonimo, privado o anonimo y
privado.
2.1Configuracion FTP privado:
Si hemos decidio esta opcion deberemos de crear las cuentas de usuario
antes. Las cuentas se crean como un usuario cualquiera de linux, es
decir:
# su
# adduser <usuario>
#ej: adduser pepito
# passwd <usuario>
#ej: passwd pepito => pepitopassword
Acontinuacion deberemos de editar el archivo /etc/passwd y modificar la
linea que hace referente al usuario pepito:
# vim /etc/passwd
Al editar el fichero, en el final de este nos aparecera una
linea como esta(siguiendo el ejemplo anterior):
pepito:x:1007:100::/home/pepito:/bin/bash
Deberemos de modificarlo para que quede de asi:
pepito:x:1007:100::/home/ftp:/bin/false
Es decir, le decimos que su carpeta personal es donde tenemos el ftp, y
su shell es una shell falsa(/bin/false). El password como os fijais
aparece con un x, esto quiere decir que el password esta en el archivo
/etc/shadow con una encriptacion MD5(mucho mas seguro que si ponemos el
pasword en texto plano).
Asi lo haremos con todos los usuarios que queramos añadir.
Una
vez listo los usuarios, continuaremos por donde nos hemos quedado con
la
edicion del archivo proftpd.conf:
<Directory
/home/ftp/>
#Le decimos que el directorio del ftp
es /home/ftp y acontinucacion le damos unas caracteristicas
Umask
077 077
AllowOverwrite
off
</Directory>
Si ademas queremos tener nuestra carpeta de subida deberemos de
añadir, debajo de </Directory> lo siguiente:
<Directory
/home/ftp/subir>
#nuestro directorio de subida se
encontrara en /home/ftp/subir
Umask
077 077
AllowOverwrite
on
<Limit READ WRITE
STOR> #El directorio tendra acceso de lectura,
escritura y grabacion para todos(Allow All), en estos caso es muy
recomendable
AllowAll
#usar dentro del limit el order,
denny y allow para que solo ciertos usuarios pueden tener este
privilegio, igual que cuando
</Limit>
#aceptavamos o denegabamos permisos a
ciertas ip's
</Directory>
Con esto ya tendriasmos el ProFTPd listo para funcionar.
2.2 Configuracion FTP Privado y anonimo:
Para configurar el ftp de esta forma hemos de haber seguido todos los
pasos del punto 2 y el punto 2.1. Una vez hecho esto deberemos de
editar al final del fichero proftpd.conf unas nuevas lineas:
<Anonymous /home/ftp>
AccessGrantMsg
"mensage"
User
ftp
Group
nogroup
UserAlias
anonymous ftp
RequireValidShell
off
MaxClients
<numero>
MaxClientsPerHost
<numero>
MaxClientsPerUser
<numero>
<Limit LOGIN>
#Cualquier persona podra loguearse con la cuenta anonima aunque le
ayamos denegado el acceso arriba, ya que
AllowAll
#la cuenta
anonima tiene unas caracteristicas muy peculiares, si queremos que el
efecto sea el mismo en la cuenta
</Limit>
#anonima
tambien, deberemos de denegar aqui a las ip's que no queramos que
puedan ser logueadas con anonymous
<Directory
/home/ftp/>
#Le decimos que el directorio del ftp
es /home/ftp y acontinucacion le damos unas caracteristicas
Umask
077 077
AllowOverwrite
off
</Directory>
<Directory
/home/ftp/subir>
#nuestro directorio de subida se
encontrara en /home/ftp/subir
Umask
077 077
AllowOverwrite
on
<Limit READ WRITE
STOR> #El directorio tendra acceso de lectura,
escritura y grabacion para todos(Allow All), en estos caso es muy
recomendable
AllowAll
#usar dentro del limit el order,
denny y allow para que solo ciertos usuarios pueden tener este
privilegio
</Limit>
</Directory>
</Anonymous>
Como me imagino que hos habreis dado cuenta, la cuenta anonima es muy
especial, ya que muchas de las caracteristicas de esta cuenta, ahi que
ponerlas dentro de la etiqueta <Anonymous> </Anonymous>.
2.3 FTP unicamente anonimo:
Deberemos de haber seguido todos los pasos anteriores pero omitiendo el
punto 2.1. Acontinuación deberemos de usar una etiqueta limit,
arriba de la etiqueta anonymous:
<Limit LOGIN>
DenyAll
</Limit>
Con esta etiqueta denegaremos cualquier intento de loguearse de
cualquier usuario que este creado en /etc/passwd. Cuidado que no lleve
a confusiones, en la etiqueta pone que deniaga a todos los usuarios la
posibilidades de loguearse, pero el motivo de que la cuenta anonymous
si que pueda, es debido a que dentro de esta, tenemos la etiqueta
<Limit LOGIN> AllowAll </Limit>, ya que la cuenta anonima
es independiente.
2.4 Mejoras de apariencia en el archivo proftpd.conf:
Si os habeis fijado en las opciones donde pone "mensage" cuando pongo
ejemplos pongo en algunos sitios %X siendo X una letra. Esto son
opciones del FTP. Entre muchas de las posibilidades que tenemos voy a
destacar las siguientes:
- %m: numero de usuarios conectados al ftp
- %u: nombre del usuario que se ha logueado
- %t: fecha/hora a la que se logueo el usuario
3.Carga de ProFTPd en el inicio
y arrancar el demonio:
Para que el ftp se cargue en el arranque de nuestra maquina deberemos
de seguir los siguientes pasos:
Si hemos compilado el proftpd deberemos de introducir el script de
carga, ya sea el /etc/init.d/proftpd o en /usr/local/sbin/proftpd donde
corresponda, dependiendo de nuestra distribucion.
Si lo hemos instalado desde gentoo deberemos de poner las siguientes
lineas:
# rc-update add proftpd default
Por lo contrario hemos instalado ProFTPd desde debian deberemos de
poner lo siguiente:
# ln -s /etc/init.d/proftpd
/etc/rcX.d/S20proftpd
Siendo X nuetro runlevel, si tenemos dudas de cual es nuestro runlevel,
poner lo siguiente:
# cat /etc/inittab | grep id
El resultado sera algo parecido a esto(siendo la X el numero de nuestro
runlevel):
id:X:initdefault:
Para arrancar el servidor sin reiniciar deberemos de escribir lo
siguiente:
# /etc/init.d/proftpd start
Para parar el servidor deberemos de introducir lo siguiente:
# /etc/init.d/proftpd stop
Para restaurar y volver a cargar una nueva coniguracion en proftpd.conf
debremos de poner lo siguiente:
# /etc/init.d/proftpd restart
4.Como
administrar el ftp:
Para ver que usuarios estan conectado, que esta haciendo en este
momento y desde cuando estan conectados sobrara con poner cualquiera de
las siguientes ordenes:
# ftpwho
# ftptop
Cada una tiene una caractristica, que dependiendo de gusto, le
gustara mas una u otra. ftpwho es mas cuando queremos ver en un
instante de tiempo, mientras que ftptop es mas un monitor que te
informa en tiempo real de los cambios en tu servidor ftp, por lo que
este es recomendable usarlo en una terminal aparte.
Para cerrar el servidor y no permitir que ningun usuario puede
acceder al servior y mostrar un mensage con el motivo podemos
usar la herramienta ftpshut(para mas informacion man ftpshut):
# su
# ftpshut now "El servidor se encuentra cerrado por motivos tecnicos"
Para expulsar a un usuario de nuestro servidor, sobrara con
mirar el numero de proceso en el que esta y matar el proceso:
# ps aux | grep proftpd
Un ejemplo seria el siguiente
# ps aux | grep proftpd
pepito
4299 0.0 0.9
4432 2388 ?
S 23:07 0:00 [proftpd]
fulanito 4319 0.0 0.9 5432 3563
? S
23:57 0:00 [proftpd]
tontito 4681 0.0 0.9
6124 4341 ?
S 01:16 0:00 [proftpd]
Obtendremos una lista de todos los procesos(usuarios) que estan
conectados y a su derecha su PID(en este ejemplo vamos a tirar a
pepito):
# kill -9 4299
Para saber mas informacion acuerdate de usar los log's del servidor que
estan en /var/log/.
5. Informacion extra:
Manual completisimo de proftpf en ingles: aki
Indice de todos los comandos a utilizar con su explicacion del proftpd:
aki
G0sU
e-mail address: moxilo@hotmail.com.
frikis.org
http://www.frikis.org/staticpages/index.php/proftpd