Proftpd with Ldap

Posted on Posted in linux, seguridad

En una entrada anterior explique como instalar un servicio sftp (transferencia de ficheros segura)  con dos áreas la administrativa y la pública. Este servicio se sustentaba en el servicio SSH, por lo que, para poder utilizarlo se necesitaba un cliente como winscp o Filezilla, así los administradores de las diferentes departamentos que tenemos en el sftp pueden subir sus archivos de forma segura. Pero que pasa si el administrador del departamento quiere compartir sus archivos con otros usuarios/instituciones?. La respuesta es que este tendría que explicarle como se configura el cliente seguro para poder conectarse a la parte pública del FTP en la cual el usuario público solo podría leer, ni modificar ni eliminar.

Esto Puede ser muy tedioso, por lo que se me ocurrió la instalación de la parte pública del FTP usando Proftpd, un servidor de ficheros en plano, el cual lo configuraría para que la autentificación fuera bajo LDAP y acceso permitido solo al usuario público (nada de administradores) sobre el área pública de cada departamento del SFTP. Bueno manos a la obra:

 

Paquetes y usuarios necesarios:

Necesitamos tener las librerías usadas para compilar cualquier paquete así como las librerías de ldap para poder compilarlo habilitando la “carga” del módulo mod_ldap.c

yum install gcc-c++ openldap-devel.x86_64

Añadimos al usuario bajo el que correrá el demonio del proftpd y deshabilitamos el login de este:

useradd proftpd 
proftpd:x:101:101::/usr/local/etc2/proftpd:/usr/sbin/nologin

En el post anterior explicamos como se configuran los grupos locales en la máquina, para poder realizar el chrooted, en esté caso como tenemos dos partes, una privada y otra pública, tendremos dos grupos.

groupadd sftp
groupadd sftp_pub
vi /etc/group
sftp:x:200:
sftp_pub:x:600:
Instalación:
wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.3f.tar.gz
tar xvfz proftpd-1.3.3f.tar.gz
cd proftpd-1.3.3f
./configure --with-modules=mod_ldap --prefix=/usr/local/etc2/proftpd
make
make install
Configuración
directorio de logs
mkdir /var/log/proftpd/
chown proftpd.proftpd /var/log/proftpd/
Fichero de arranque y parada del servicio
# !/bin/sh

#snaider 14102011

[ -f /usr/local/etc2/proftpd/sbin/proftpd ] || exit 0

SSHDPIDFILE=/usr/local/etc2/proftpd/var/proftpd.pid

PORT=21
# Get port number
PORT=`grep Port /usr/local/etc2/sshd_pub/etc/sshd2_config | awk '{ x = $2 } END {print x}' -`
if [ "X$PORT" = "X" ]
then
PORT=21
fi

SSHD_PID=`cat $SSHDPIDFILE`

# See how we were called.

case "$1" in
start)
# Start daemons.
echo -n "Starting proftpd in port $PORT: "
/usr/local/etc2/proftpd/sbin/proftpd
echo "done."
;;
stop)
# Stop daemons.
if test -n "$SSHD_PID"
then
echo -n "Shutting down proftpd in port $PORT: "
kill $SSHD_PID
echo "done."
else
echo "No proftpd process found"
fi

if test -f "$SSHDPIDFILE"
then
rm -f $SSHDPIDFILE
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: sshd_pub {start|stop|restart}"
exit 1
esac
exit 0
Configuración del PROFTPD

Configuración a aplicar si queremos que nuestro servidor busque los usuario en el LDAP, realice el chrooted y no permita el acceso a los administradores (gidNumber 200)

ServerName "FTP Snaider"
ServerType standalone
DefaultServer on

Port 21
#PID FILE
ScoreboardFile /var/run/proftpd.score

#TIEMPOS ACCESO
TimeoutLogin 120
TimeoutIdle 600
TimeoutNoTransfer 900
TimeoutStalled 0 #TRANSFERENCIA INFINITA

#LOGUEO

TransferLog /var/log/proftpd/transfer
ExtendedLog /var/log/proftpd/extended

LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"
LogFormat write "%h %l %u %t \"%r\" %s %b"

# Don't use IPv6 support by default.
UseIPv6 off

# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 022

#MAXIMO CONEXIONES
MaxInstances 70

#USUARIOS EJECUCCION DEMONIO
User proftpd
Group proftpd

#HABILITAMOS CHROOTED
DefaultRoot ~

#LDAP SERVER

LDAPServer ldap.snaider.dom
LDAPDNInfo cn=ftpAdmin,dc=snaider,dc=dom <password>
LDAPDoAuth on "ou=ftp,o=accounts,dc=snaider,dc=dom"

# Normally, we want files to be overwriteable.
AllowOverwrite on

# DENEGAMOS ACCESO A LOS ADMINISTRADORES
<Directory ~>
<Limit ALL>
DenyGroup sftp
</Limit>
</Directory>
Estructura en el NFS

Los administradores podrán escribir y los publicos solo leer
NOTA: Si queremos que los Publicos puedan leer lo único que tenemos que hacer es cambiar el permisos al grupo sftp_pub en la carpeta “pub” permitiendo la escritura 770

cd /usr/local/etc3/nfsshared
mkdir -p dep1/pub
chown -R dep1-admin.sftp_pub medios-audiovisuales/
chmod -R 750 dep1/
Usuarios en el LDAP

Aquí un ejemplo de los usuarios que conforman un departemento.

Básicamente lo que tenemos que modificar es el homeDirectory, para que el proftpd realice el chrooted

dn: uid=dep1-admin,ou=ftp,o=accounts,dc=snaider,dc=dom
objectClass: account
objectClass: posixAccount
uid: dep1-admin
ou: dep1-admin
cn: dep1-admin
description: recurso ftp para dep1
host: ftp.snaider.dom
homeDirectory: /usr/local/etc3/nfsshared/dep1
loginShell: /bin/sh
uidNumber: 203
gidNumber: 200
userPassword: xxx

dn: uid=dep1-pub,ou=ftp,o=accounts,dc=snaider,dc=es
objectClass: account
objectClass: posixAccount
uid: dep1-pub
ou: dep1-pub
cn: dep1-pub
description: recurso ftp publico para dep1
host: ftp.snaider.dom
homeDirectory: /usr/local/etc3/nfsshared/dep1/pub
loginShell: /bin/sh
uidNumber: 603
gidNumber: 600
userPassword: xxx

Hasta aquí el post de hoy. Se aceptan críticas 😉

2 thoughts on “Proftpd with Ldap

Leave a Reply

Your email address will not be published. Required fields are marked *