pure-ftp · solaris 10

Instalación y configuración de Pure-ftp en Solaris 10

Pure-FTP es un servidor FTP muy potente y que permite facilmente configurar cosas que con el cliente que viene por defecto en Solaris es mas complicado, por ejemplo, enjaular usuarios.

En el repositorio de openCSW (http://www.opencsw.org) existe el paquete y las dependencias de pureFTPd, con lo que no es necesario compilar las fuentes. Para poder instalarlo en varios sistemas creo un paquete con el software y todas sus dependencias. Suponiendo que ya tenemos la aplicación pkgutil instalada en un sistema con acceso a internet, crearemos el paquete de la siguiente forma:

# PATH=$PATH:/opt/csw/bin/

# pkgutil –stream –target=i386:5.10 –output pure-ftp-dep.pkg –yes –download pureftpd

Solving needed dependencies …

Solving dependency order …

Package list:

CSWcacertificates-20120511,REV=2012.05.11 (opencsw/testing)

CSWcas-migrateconf-1.47,REV=2012.02.14 (opencsw/testing)

CSWcas-preserveconf-1.42,REV=2010.11.26 (opencsw/testing)

CSWcommon-1.5,REV=2010.12.11 (opencsw/testing)

CSWlibssl0-9-8-0.9.8x,REV=2012.05.12 (opencsw/testing)

CSWosslrt-0.9.8x,REV=2012.05.12 (opencsw/testing)

CSWpureftpd-1.0.27,REV=2010.01.23 (opencsw/testing)

Total size: 4.3 MB

Esta utilidad ademas proporciona los comandos para instalar todo el software de forma correcta:

Install commands in dependency safe order:

pkgadd -d pure-ftp-dep.pkg CSWcommon

pkgadd -d pure-ftp-dep.pkg CSWcas-preserveconf

pkgadd -d pure-ftp-dep.pkg CSWcas-migrateconf

pkgadd -d pure-ftp-dep.pkg CSWcacertificates

pkgadd -d pure-ftp-dep.pkg CSWlibssl0-9-8

pkgadd -d pure-ftp-dep.pkg CSWosslrt

pkgadd -d pure-ftp-dep.pkg CSWpureftpd

Una vez instalado el software pasaremos a configurarlo. Lo primero que deberemos hacer es crear un grupo y un usuario que será el que utilice la aplicación con los usuarios virtuales.

# groupadd pftpgroup

# useradd -g pftpgroup -d /dev/null -s /bin/false pftpuser

Crearemos ademas los directorios necesarios para la aplicación. En mi caso creare un directorio /ftp donde irán todas las cuentas de usuario. También será necesario crear un directorio donde se ubicarán los ficheros de configuración del servidor.

# mkdir /ftp

# mkdir -p /opt/csw/etc/pure-ftpd/

Una vez instalada ya podemos utilzar los comandos que proporciona pure-ftp. El principal comando para trabajar con usuarios es pure-pw. Con este comando podemos crear, modificar y borrar usuarios. Nos permitirá establecer cuotas, tamaños de ficheros, horarios de conexión, etc. Existe otra utilidad que nos permitirá convertir todos los usuarios de sistema al formato que utiliza pureftp. Para convertirlos lo haremos de la siguiente forma:

(Añadimos los directorios donde se encuentran los binarios al PATH para mayor comodidad)

# PATH=$PATH:/opt/csw/bin:/opt/csw/sbin

# pure-pwconvert >> /opt/csw/etc/pure-ftpd/pureftpd.passwd

# pure-pw mkdb /opt/csw/etc/pure-ftpd/pureftpd.pdb

Entre los metodos de autenticación que permite pure-FTP utilizaremos el metodo puredb. Este método hace uso de dos ficheros, el pureftpd.passwd, que tiene un formato similar al /etc/passwd. El otro es el fichero binario que utliza pure-FTP para leer la configuración de usuarios, haciendolo que sea mas rápido que el acceso a un fichero de texto. Por tanto, cada vez que se modifica el fichero pureftpd.passwd porque se ha añadido/borrado/modificado algún usuario, es necesario confirmar los cambios en el fichero pureftpd.pdb con el comando pure-pw mkdb. Como veremos mas adelante, este último paso nos lo podemos ahorrar con el parámetro -m cuando hagamos algúna modificación de usuarios. Estos cambios siempre serán en caliente, con lo que no será necesario reiniciar el servidor de FTP.

A partir de este momento ya podemos arrancar el servidor, de la siguiente forma:

# /opt/csw/sbin/pure-ftpd -j -A -lpuredb:/opt/csw/etc/pure-ftpd/pureftpd.pdb

Con la opción -j se creará el directorio home del usuario en caso de que no exista y con la opción -d le indicamos que todos los usuarios deben estar enjaulados en su home y no pueden salirse de ahí (chroot).

Veamos ahora como trabajar con usuarios con el comando pure-pw. Este comando tiene varias opciones, entre ellas useradd, usermod y userdel para añadir, modificar y borrar usuarios, respectivamente. Para crear un usuario lo haremos de la siguiente forma:

# pure-pw useradd joe -u pftpuser -d /ftp/joe

Password:

Enter it again:

Como hemos comentado antes, los cambios se deberán aplicar en el fichero pureftpd.pdb.

# pure-pw mkdb /opt/csw/etc/pure-ftpd/pureftpd.pdb

Podemos modificar también algunos parámetros como el límite del tamaño de fichero que el usuario puede subir o bajar al ftp:

# pure-pw usermod joe -N 10

Si queremos aplicar directamente este cambio en el fichero pureftpd.pdb utilizaremos la opción -m:

# pure-pw usermod joe -N 3 -m

Otra opción interesante es la de aplicar un horario de conexión permitido:

# pure-pw usermod joe -z 0900-1800 -> conexión de 09h a 18h

# pure-pw usermod joe -z ” -> deshabilitar el control horario

# pure-pw usermod joe -z 0000-0000 -> no permite las conexiones para ese usuario

Con la opción show del comando pure-pw podemos ver información del usuario:

# pure-pw show joe

Login : joe

Password : $2a$07$E3eQ4sJhytw.DOz3yEHIxuq34.Omp6MwIA0ZlUFagosFqqO/HOUvO

UID : 102 (ftpuser)

GID : 100 (ftpgroup)

Directory : /ftp/joe/./

Full name :

Download bandwidth : 0 Kb (unlimited)

Upload bandwidth : 0 Kb (unlimited)

Max files : 0 (unlimited)

Max size : 10 Mb (enabled)

Ratio : 0:0 (unlimited:unlimited)

Allowed local IPs :

Denied local IPs :

Allowed client IPs :

Denied client IPs :

Time restrictions : 0900-1800 (enabled)

Max sim sessions : 0 (unlimited)

Para hacer mas cómoda el arranque y parada del servidor pure-FTP se puede crear un servicio de Solaris. Para ello crearemos el manifiesto y el metodo:

  • pure-ftp-manifest.xml

Pure-ftp Service

Pure-ftp service

  • pure-ftp-method

#!/sbin/sh

#

# Julian Garcia-Sotoca Pascual 16/07/2013

#

. /lib/svc/share/smf_include.sh

case “$1” in

start)

/opt/csw/sbin/pure-ftpd \

–altlog /var/log/pure-ftpd.log \

–verboselog \

–login puredb:/opt/csw/etc/pure-ftpd/pureftpd.pdb \

–noanonymous \

–maxclientsnumber 100 \

–chrooteveryone \

–ipv4only \

–pidfile /var/run/pure-ftpd.pid \

–daemonize 2>&1 >/dev/null

;;

stop)

/usr/bin/pkill pure-ftpd 2>&1 >/dev/null

exit 0

;;

*)

echo “Usage: $0 { start | stop }”

exit 1

;;

esac

exit 0

Como vemos, se arrancará el servicio añadiendo algunas opciones mas, para que cree un fichero de log, otro con el pid y que trabaje en modo demonio, por ejemplo. Para realizar la instalación mas automatizada he creado el siguiente script:

  • inst_pureFTP.sh

:

echo “Deshabilitar FTP de solaris”

svcadm disable svc:/network/ftp:default

svcs -a | grep network/ftp:default

echo “Pulse intro para continuar”

read

clear

echo “Instalando pure-FTP”

pkgadd -d pure-ftp-dep.pkg CSWcommon

pkgadd -d pure-ftp-dep.pkg CSWcas-preserveconf

pkgadd -d pure-ftp-dep.pkg CSWcas-migrateconf

pkgadd -d pure-ftp-dep.pkg CSWcacertificates

pkgadd -d pure-ftp-dep.pkg CSWlibssl0-9-8

pkgadd -d pure-ftp-dep.pkg CSWosslrt

pkgadd -d pure-ftp-dep.pkg CSWpureftpd

echo “Pulse intro para continuar”

read

clear

echo “Creacion usuario ftp”

groupadd pftpgroup

useradd -g pftpgroup -d /dev/null -s /bin/false pftpuser

echo “Pulse intro para continuar”

read

clear

echo “Creando directorios”

mkdir /ftp

mkdir -p /opt/csw/etc/pure-ftpd/

echo “Pulse intro para continuar”

read

clear

PATH=$PATH:/opt/csw/bin:/opt/csw/sbin

echo “Importando usuarios”

echo “IMPORTANTE: los usuarios que se quieren migrar deben tener shell y home”

pure-pwconvert >> /opt/csw/etc/pure-ftpd/pureftpd.passwd

pure-pw mkdb /opt/csw/etc/pure-ftpd/pureftpd.pdb

echo “Usuarios importados:”

cut -d: -f1 /opt/csw/etc/pure-ftpd/pureftpd.passwd

echo “Pulse intro para continuar”

read

clear

echo “Instalando servicio”

cp pure-ftp-manifest.xml /var/svc/manifest/site

cp pure-ftp-method /lib/svc/method/pure-ftp

chmod u+x /lib/svc/method/pure-ftp

svccfg -v import /var/svc/manifest/site/pure-ftp-manifest.xml

svcs -a | grep pure-ftp

echo “Pulse intro para continuar”

read

clear