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 Service
Pure-ftp service
#!/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:
:
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