Eu enfrentei o mesmo problema em minha instalação do pure-ftpd e depois de alguma depuração eu encontrei o problema.
Existe um limite de Linux (o tamanho máximo do segmento de dados de um processo) que é 16k por padrão.
Você pode alterar esse limite em /etc/security/limits.conf
e definir um valor mais alto ou executar ulimit -d unlimited
antes de executar o script pure-ftpd
daemon.
Infelizmente, isso não resolve o problema.
pure-ftpd
é executado como um daemon, e o processo principal pode ter um tamanho máximo ilimitado do segmento de dados do processo. No entanto, pure-ftpd
cria processos filhos com o uid especificado para cada usuário de ftp. Esses processos filhos não herdam o limite de tamanho máximo do pai. Os processos filhos são executados com um limite de 16kb e
pure-ftpd
retorna erro 421 de memória.
Eu tentei alterar o arquivo /etc/security/limits.conf
, adicionando os usuários configurados em pure-ftpd
e ainda não funcionando. Eu também tentei adicionar uma linha para todos os usuários (*) e também não funciona.
Eu acho uma solução alternativa para ignorar esses limites, embora não seja a melhor solução.
Existe um parâmetro do kernel ( ignore_rlimit_data
) que desabilita esses limites. Você pode definir isso como na opção de inicialização modificando grub.cfg
(depende das versões do Linux). Esta solução precisa de uma reinicialização do sistema.
Você também pode alterar essa opção em um Linux em execução:
#echo "Y" > /sys/module/kernel/parameters/ignore_rlimit_data
Isso resolveu o problema, mas eu gostaria de saber como tornar os processos filhos puros herdando valores ulimit.