SFTP with LDAP authentification

Posted on Posted in linux, seguridad

Hace unos días me encargaron montar un servidor SFTP (ftp seguro) con autentificación basada en LDAP, vamos a ver como sería la instalación y configuración de dicho servicio.

IMPORTANTE–> En máquinas de 64 bits he tenido problemas con el módulo PAM y SSH

Instalación y Configuración de SSH:

Para poder implementar un servidor de transferencia de ficheros seguro tenemos dos opciones, una es instalar Proftpd con módulo de Ldap + módulo SSL o la más rápida y sencilla instalar un servidor SSH alternativo que autentifique usando PAM + LDAP.

Nos descargamos el software:

 wget ftp://mirror.pa.msu.edu/ssh/ssh-3.2.9.1.tar.gz
Una vez descargado compilamos e instalamos:
tar xvfz ssh-3.2.9.1.tar.gz
cd ssh-3.2.9.1
more SI-INSTALL
  ./configure --prefix=/usr/local/etc2/sshd --with-threads --without-pgp -with-etcdir=/usr/local/etc2/sshd/etc
Configuration summary:
======================

  Host type................: Linux i386
  CC.......................: gcc
  CPPFLAGS.................:
  CFLAGS...................: -g -O2 -Wall -Wno-unknown-pragmas -D_REENTRANT
  LDFLAGS..................:
  LIBS.....................: -lm -lbsd -lnsl -lbsd -lcrypt -lutil -lncurses -ldl -lpthread -lcrypt -lnsl -L/usr/local/lib  -lutil
  X includes...............: NO
  X libraries..............: /usr/lib

  Debug enabled............: light
  IPv6 support.............: yes
  RSA support..............: yes
  SSH1 internal emulation..: yes
  SSH1 fallback capability.: no
  Kbd-interactive in server: yes
    Submethods.............: pam passwd plugin
  Kbd-interactive in client: yes
  PAM support in server....: yes
  PAM support in client....: yes
  SecurID support in server: no
  SecurID support in client: yes
  Kerberos5 support........: no
  TCP Wrappers support.....: no
  Terminal capability lib..: terminfo
  X11 SECURITY extension...: no

  PTY Type.................: openpty

  Installation prefix......: /usr/local/etc2/sshd
  bin directory............: /usr/local/etc2/sshd/bin
  sbin directory...........: /usr/local/etc2/sshd/sbin
  man directory............: /usr/local/etc2/sshd/man
  ssh2 etc directory.......: /usr/local/etc2/sshd/etc
  PID-file directory.......: default

 make   make install 

Que no se nos olvide cambiar el puerto 22 de nuestro ssh por defecto ya que entrará en conflicto con el nuevo servicio SFTP

Configuramos el archivo de inicio
 
# !/bin/sh
#
# chkconfig: 345 85 15
# description: SSH Secure Shell daemon
#
# Author: Sami Lehtinen <sjl@ssh.com>
#
# sshd2         This shell script takes care of starting and stopping
#               sshd2.
#
# partly
#
# Copyright (C) 2000 SSH Communications Security Corp, Helsinki, Finland
#
# Most of the code taken from RedHat Linux /etc/rc.d/init.d/httpd,
# so I guess
#
# Copyright (C) 1999 RedHat, Inc.

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

PORT=
SSHDPIDFILE=

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

# Get sshd2 pid file & pid

if test -f /var/run/sshd2_$PORT.pid
then
  SSHDPIDFILE=/var/run/sshd2_$PORT.pid
elif test -f /usr/local/etc2/sshd/etc/sshd2_$PORT.pid
then
  SSHDPIDFILE=/usr/local/etc2/sshd/etc/sshd2_$PORT.pid
fi

if test -n "$SSHDPIDFILE"
then
  SSHD_PID=`cat $SSHDPIDFILE`
fi

# See how we were called.

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

        if test -f "$SSHDPIDFILE"
        then
          rm -f $SSHDPIDFILE
        fi
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  *)
        echo "Usage: sshd2 {start|stop|restart}"
        exit 1
esac

exit 0
Auto arranque del sistema
 
chkconfig --level 3 sshd2 on
chkconfig --level 4 sshd2 on
chkconfig --level 5 sshd2 on
Configuraciones:
sshd_config

Configuramos el servicio en “/usr/local/etc2/sshd/etc/sshd_config”

 
SyslogFacility                  AUTH
SyslogFacility                  LOCAL4
SftpSyslogFacility              LOCAL4
Port                            22
SettableEnvironmentVars         LANG,LC_(ALL|COLLATE|CTYPE|MONETARY|NUMERIC|TIME),PATH,TERM,TZ
AllowedAuthentications          keyboard-interactive,password
AuthKbdInt.Optional             pam
ChRootGroups sftp,Sftp
subsystem-sftp                  internal://sftp-server
ldap.conf

Tenemos que establecer el servidor de Ldap, rama en la que están los usuarios autentificados, usuario admin de dicha rama, etc.

Para ello editamos los ficheros “/etc/ldap.conf & /etc/openldap/ldap.conf”

 
host                    ldapserver.snaider.dom
base                    ou=ftp,o=accounts,dc=snaider,dc=com
ldap_version            3
pam_login_attribute     uid
binddn                  cn=AdminFTP,dc=snaider,dc=com
bindpw                  ********
ssl                     start_tls
tls_reqcert             allow
TLS_CACERT              /etc/CAcerts
NSswitch.conf

Tenemos que decirle al sistema que una opción a la hora de autentificar es mediante el uso de PAM:

passwd:     files pam
shadow:     files
group:      files
pam.d

Tenemos que cargar las librerías de Ldap para el servicio sshd2, para ello editamos “/etc/pam.d/sshd2” y añadimos:

auth       required   /lib/security/pam_ldap.so
account    required   /lib/security/pam_ldap.so
password   required   /lib/security/pam_ldap.so
session    required   /lib/security/pam_ldap.so
usuarios de ldap
 
dn: uid=pruebas,ou=ftp,o=accounts,dc=snaider,dc=dom
objectClass: account
objectClass: posixAccount
uid: pruebas
ou: pruebas
cn: pruebas
description: recurso ftp para pruebas
host: ftptest.snaider.dom
homeDirectory: /usr/local/etc2/ftpshared/pruebas
loginShell: /bin/sh
uidNumber: 201
gidNumber: 200
userPassword: xxx
CHROOTED

Para que los usuarios que se autentifiquen vallan a su directorio personal y no puedan subir de directorio, es decir estar enjaulados y no poder entrar a otras carpetas del sistema, vemos que hemos habilitado la opción

 
ChRootGroups sftp,Sftp

Y en el LDAP hemos creado los usuarios todos con el mismo gidNumber “200”.

Ahora tenemos que crear el grupo sftp con este gidnumber

 
groupadd sftp
vi /et/group
sftp:x:200:

Creamos el directorio que contendrá los recursos

 
mkdir -p /usr/local/etc2/ftpshared/pruebas

Y por último asignamos los permisos a las carpetas

 
cd /usr/local/etc2/ftpshared
chown pruebas.sftp /usr/local/etc2/ftpshared/pruebas

Espero que sirva de ayuda cualquier duda o sugerencia no dudéis en comentar. 😉

One thought on “SFTP with LDAP authentification

Leave a Reply

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