Como instalar o PureFTP com MySQL e autenticação TLS no Ubuntu Xenial (16.04)

Usei o ProFTPd durante muito tempo. Todavia, já na versão Ubuntu LTS anterior (Trusty) o ProFTPd era já um problema, desligando-se por si próprio, o que tive de corrigir com um script.
No Xenial, a situação complicu-se, com o produto a parar de funcionar mas continuando activo. Por outro lado nunca consegui por a funcionar o ProFTPd com transferências passivas e a autenticação TLS nunca funcionou bem dado que o comando MLSD falhava com este tipo de autenticação.

Sendo assim decidi tentar o PureFTP. Tive de procurar em imensos sítios a necessária informação dado que o sítio deles não tem qualquer informação sobre os obscuros ficheiros da pasta de configuração.

Afinal descobri que a instalação até é relativamente simples e repetível desde que se conheçam os passos a seguir e que o produto trabalhava fiavelmente, donde decidi partilhar os resultados com a comunidade.

Assumo que os que me lêm vão utilizar o phpmyadmin para as operações MySQL eque o conhecem razoavelmente, e assim vou providenciar um ficheiro sql para a base de dados e supor que o InnoDB ou outro motor transaccional vai ser utilizado. Se estiver a utilizar o myISAM, comente a última declaração do ficheiro mysql.conf fornecido (MySQLTransactions On). Todos os comandos de linha devem ser precedidos de sudo se não tiver privilégios administrativos ou então pode iniciar uma sessão de raís com o comando su.

1. Instalar o programa


# apt-get install pure-ftpd-mysql

2. Prepara o utilizador e grupo


# groupadd -g 2001 ftpgroup
# useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser

3. Preparar a base de dados


Agora utilize o phpmyadmin no separador server e crie um utilizador chamado pureftpd, anote a senha que escolheu e clique em "Create database with same name and grant all privileges.".

Carregue este ficheiro e desempacote-o.
No separador do lado esquerdo dirija-se à recem-criada base de dados e clique em "Import". Seleccione o ficheiro carregado no passo anterior. Ficará com uma base de dados com uma úca tabela onde:

User é o nome do utilizador
status é 0 inactivo 1 activo
Password é a senha, encriptada em MD5 (escolher MD5 depois de introduzir a senha no separador de escolhas varchar(64). Mudar a senha no utilizador de teste fornecido ou este nunca funcionará
Uid and Gid serão 2001 (criados nos passos anteriores)
Dir deve apontar para a pasta onde residem os ficheiros de utilizador. Ou a pasta foi programada para ser propriedade do utilizador/grupo criados (chown ftpuser.ftpgroup "dir") ou simplesmente pode adicionar ftpuser ao grupo www-data se estivermos a falar de ficheiros a serem servidos pelo servidor apache.
ULBandwidth and DLBandidth são os limites em kb/s para a banda utilizada no carregamento/descarregamento , 0 retira os limites
comment servirá os seus propósitos referentes à identificação do utilizador
QuotaSize é o máximo espaço utilizável pelo utilizador em carregamento
QuotaFiles é o máximo número de ficheiros que o utilizador pode carregar

# cp /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf.old

4. Configurar o pureFTP


Carregar este ficheiro e descompactá-lo.
Copiar o ficheiro mysql.conf na pasta db para a pasta /etc/pure-ftpd/db/

Por favor mude o texto my_password no ficheiro mysql.conf, campo MYSQLPassword, para a senha que definiu quando criou o utilizador com o mysqladmin

Carregar este ficheiro e descompactá-lo.
Coopiar todos os ficheiros da pasta conf directory to /etc/pure-ftpd/conf/


Assumimos nestes ficheiros que as portas passivas são 50000-50010 (PassivePortRange), que não forçaremos o modo passivo (não há ficheiro ForcePassiveIP, se precisar crie um e ponha o IP numa única linha), não havendo lugar à criação automática da pasta onde residem os ficheiros do utilizador (CreateHomeDir), que o sistema não tentará a resolução de nomes (DontResolve), sem mostrar os ficheiros ocultos (DisplayDotFiles), e sem autenticação de utilizadores locais (PAMAuthentication), todos os utilizadores restringidos à sua pasta de origem (ChrootEveryone). Aumentei o número máximo de ficheiros por pasta e a máxima profundidade de pastas para (LimitRecursion) 5000/50. Se quiser mudar este estado de coisas refira-se à documentação.

# aptitude install openssl

5. Instar o certificado ssl


# openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

-days 3650 criará um certificado válido por 10 anos...

# chmod 600 /etc/ssl/private/pure-ftpd.pem

E finalmente...

6. Por a trabalhar


# service pure-ftpd-mysql restart

Bom, deve funcionar...

A instalação acima corre por sua conta e risco.