O ftp é um dos serviços mais antigos e utilizados na internet para troca de arquivos entre servidores e clientes. Devido ao fato de ter sido projetado inicialmente apenas como uma maneira fácil de disponibilizar os arquivos online, não utilizava a transferência segura criada mais tarde com o nome de FTPS (não confundir com SFTP que utiliza o protocolo ssh). O FTPS nada mais é que um FTP que utiliza a transferência de arquivos entre o cliente e servidor de forma criptografada dificultando e impedindo a coleta de dados como senha e nome de usuários com programas sniffers. Apesar de o FTP sem transferência segura ser muito utilizado, as vezes torna-se necessário a implantação do FTPs em empresas que precisam de sigilos entre as informações e dados trocados via ftp.
Neste tutorial estaremos abordando uma forma simples de utilizar o servidor Proftpd tanto como um ftp normal ou implementando a transferência segura através de chaves SSL.
O QUE FOI UTILIZADO
Para esse tutorial foram utilizados o Ubuntu Server 11.04 rodando o servidor Proftpd e para os clientes o Filezilla e o Ftp-ssh (este ultimo é um cliente ftp seguro por linha de comando para Linux). Apesar de ter sido utilizado o Ubuntu Server nesse tutorial, o servidor Proftpd pode ser utilizado praticamente em qualquer distribuição Linux, sendo que na maioria das vezes ele já vem pré instalado na distribuição.
INSTALANDO E CONFIGURANDO O SERVIDOR PROFTPD
Para instalar o Proftpd como root execute o comando:
#apt-get install proftpd
Nas perguntas feitas pelo configurador mantenha as respostas padrões.
Renomei o arquivo /etc/proftpd/proftpd.conf para /etc/proftpd/proftpd.conf.backup
#mv /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.backup
Cria um novo arquivo proftpd.conf:
#mcedit /etc/proftpd/proftpd.conf
Digite o seguinte conteúdo no arquivo criado:
#Carrega módulos adicionais do proftpd
LoadModule mod_ctrls_admin.c
LoadModule mod_tls.c
LoadModule mod_radius.c
LoadModule mod_quotatab.c
LoadModule mod_quotatab_file.c
LoadModule mod_quotatab_radius.c
LoadModule mod_wrap.c
LoadModule mod_rewrite.c
LoadModule mod_load.c
LoadModule mod_ban.c
LoadModule mod_wrap2.c
LoadModule mod_wrap2_file.c
LoadModule mod_dynmasq.c
LoadModule mod_vroot.c
LoadModule mod_exec.c
LoadModule mod_shaper.c
LoadModule mod_ratio.c
LoadModule mod_site_misc.c
#LoadModule mod_sftp.c
#LoadModule mod_sftp_pam.c
LoadModule mod_facl.c
LoadModule mod_unique_id.c
LoadModule mod_ifsession.c
#Configuracao principal do servidor
ServerType standalone
DefaultServer on
Umask 022
ServerName "ITN SERVER FTP"
ServerIdent on "Bem vindo ao ITN Server FTP"
ServerAdmin itn@localhost
IdentLookups off
UseReverseDNS off
Port 21
PassivePorts 60000 62000
DefaultRoot ~
TimesGMT off
MaxInstances 30
MaxLoginAttempts 3
TimeoutLogin 300
TimeoutNoTransfer 120
TimeoutIdle 120
DisplayLogin welcome.msg
DisplayChdir .message
User nobody
Group nobody
DirFakeUser off nobody
DirFakeGroup off nobody
DefaultTransferMode binary
AllowForeignAddress off
AllowRetrieveRestart on
AllowStoreRestart on
DeleteAbortedStores off
TransferRate RETR 220
TransferRate STOR 250
TransferRate STOU 250
TransferRate APPE 250
SystemLog /var/log/secure
RequireValidShell off
#Para utilizacao de certificados SSL/TLS
#<IfModule mod_tls.c>
#TLSEngine on
#TLSRequired on
#TLSVerifyClient off
#TLSProtocol SSLv23
#TLSLog /var/log/proftpd_tls.log
#TLSRSACertificateFile /etc/proftpd/certs/server.crt
#TLSRSACertificateKeyfile /etc/proftpd/certs/server.key.insecure
#TLSRenegotiate required off
#</IfModule>
<IfModule mod_ratio.c>
Ratios off
SaveRatios off
RatioFile "/restricted/proftpd_ratios"
RatioTempFile "/restricted/proftpd_ratios_temp"
CwdRatioMsg "Please upload first!"
FileRatioErrMsg "FileRatio limit exceeded, upload something first..."
ByteRatioErrMsg "ByteRatio limit exceeded, upload something first..."
LeechRatioMsg "Your ratio is unlimited."
</IfModule>
#Apenas se o usuario for acessar seu home via ftp
<Limit LOGIN>
#AllowUser usuarioComHome1
#AllowUser usuarioComHome2
#AllowUser usuarioComHome3
DenyALL
</Limit>
<Anonymous /ftp/anonimo>
User anonymous
Group ftp
AnonRequirePassword off
MaxClients 10 "The server is full, hosting %m users"
DisplayLogin welcome.msg
DisplayChdir .msg
UserRatio anonymous 0 0 0 0
<Limit LOGIN>
Allow from All
Deny from all
</Limit>
AllowOverwrite off
<Limit LIST NLST RETR PWD XPWD SIZE STAT CWD XCWD CDUP XCUP>
AllowAll
</Limit>
<Limit STOR STOU APPE RNFR RNTO DELE MKD XMKD SITE_MKDIR RMD XRMD SITE_RMDIR SITE SITE_CHMOD SITE_CHGRP MTDM>
DenyAll
</Limit>
</Anonymous>
<Anonymous /ftp/suporte>
User suporte
Group ftp
AnonRequirePassword on
MaxClients 10 "The server is full, hosting %m users"
DisplayLogin welcome.msg
DisplayChdir .msg
UserRatio suporte 0 0 0 0
<Limit LOGIN>
Allow from All
Deny from all
</Limit>
AllowOverwrite off
<Limit LIST NLST RETR PWD XPWD SIZE STAT CWD XCWD CDUP XCUP>
AllowAll
</Limit>
<Limit STOR STOU APPE RNFR RNTO DELE MKD XMKD SITE_MKDIR RMD XRMD SITE_RMDIR SITE SITE_CHMOD SITE_CHGRP MTDM>
DenyAll
</Limit>
</Anonymous>
<Anonymous /ftp>
User itn2
Group ftp
AnonRequirePassword on
MaxClients 10 "The server is full, hosting %m users"
DisplayLogin welcome.msg
DisplayChdir .msg
UserRatio itn 0 0 0 0
<Limit LOGIN>
Allow from All
Deny from all
</Limit>
AllowOverwrite on
<Limit LIST NLST STOR STOU APPE RETR RNFR RNTO DELE MKD XMKD SITE_MKDIR RMD XRMD SITE_RMDIR SITE SITE_CHMOD SITE_CHGRP MTDM PWD XPWD SIZE STAT CWD XCWD CDUP XCUP>
AllowAll
</Limit>
<Limit NOTHING>
DenyAll
</Limit>
</Anonymous>
Calma a configuração não é tão complicada quanto possa parecer de início :D.
Vejamos as linhas principais:
ServerType standalone
MaxInstances 30
Diz respeito ao número de conexões simultâneas que serão aceitas pelo servidor.
ServerName "ITN SERVER FTP"
Nome do servidor FTP que será apresentado aos clientes ao se conectarem.
ServerAdmin itn@localhost
Email do administrador do sistema.
Port 21
Porta que será utilizada para escuta das conexões (padrão do FTP é 21).
PassivePorts 60000 62000
Configuração das portas utilizadas pelo ftp passivo (devem estar abertas no firewall).
DefaultRoot ~
Opção importante de segurança que restringe os usuários ao acesso ao seu próprio home.
ServerIdent on "Bem vindo ao ITN Server FTP"
Configuração da mensagem que será mostrada aos clientes ao se conectarem.
User nobody
Group nobody
#LoadModule mod_sftp_pam.c
#LoadModule mod_sftp.c
Carrega módulos necessários para ativar o SFTP.
#Para utilizacao de certificados SSL/TLS
#< IfModule mod_tls.c >
#TLSEngine on
#TLSRequired on
#TLSVerifyClient off
#TLSProtocol SSLv23
#TLSLog /var/log/proftpd_tls.log
#TLSRSACertificateFile /etc/proftpd/certs/server.crt
#TLSRSACertificateKeyfile /etc/proftpd/certs/server.key.insecure
#TLSRenegotiate required off
#< /IfModule >
#Apenas se o usuario for acessar seu home via ftp
< Limit LOGIN >
#AllowUser usuarioComHome1
#AllowUser usuarioComHome2
#AllowUser usuarioComHome3
DenyALL
< /Limit >
Caso você queira que um usuário possa acessar sua pasta home via FTP inclua aqui AllowUser “nomeDoUsuario” nesta tag.
Na tag:
< Anonymous /ftp/anonimo >
User anonymous
Group ftp
AnonRequirePassword off
A principal diferença da tag:
< Anonymous /ftp/anonimo >
Para as tags:
< Anonymous /ftp/suporte >
< Anonymous /ftp >
é que nessas duas últimas é necessário que o usuário entre com a senha para autenticação no servidor. Isso é definido pela opção:
AnonRequirePassword on
Com a linha abaixo definimos os comandos que o usuário anônimo pode executar. Entre eles o download de arquivos:
< Limit LIST NLST RETR PWD XPWD SIZE STAT CWD XCWD CDUP XCUP >
AllowAll
< /Limit >
Já com a linha abaixo definimos os comandos que o usuário anônimo pode não pode executar. Entre apagar arquivos, criar pastas, e executar uploads:
< Limit STOR STOU APPE RNFR RNTO DELE MKD XMKD SITE_MKDIR RMD XRMD SITE_RMDIR SITE SITE_CHMOD SITE_CHGRP MTDM >
DenyAll
< /Limit >
Veja ao final desse artigo uma lista de alguns dos comandos FTP utilizados nesse artigo.
De maneira resumida com esse exemplo de arquivo de configuração, o usuário anonymous pode apenas executar download da pasta /ftp/anonimo. O usuário suporte pode executar download da pasta /ftp/suporte. Já o usuário itn2 tem permissão completa (upload, downloads, renomear ou remover arquivos, etc), seria como um administrador do ftp, que pode acessar a raiz /ftp e fazer as modificações necessárias.
CRIANDO AS PASTAS, GRUPO E USUÁRIOS PARA O USO DO FTP.
Precisamos criar o grupo ftp e os usuários que fazem parte desse grupo para que acessem o FTP. No entanto esses usuários não devem ter permissão para logarem no servidor como usuários comuns. Para tanto execute seguintes comandos:
Cria o grupo ftp
# addgroup ftp
Cria os usuários sem pasta home e com shell desativado:
# adduser itn2 --shell /bin/false --no-create-home
# adduser suporte --shell /bin/false --no-create-home
# adduser anonymous --shell /bin/false –no-create-home
Adiciona os usuário ao grupo ftp
# adduser itn2 ftp
# adduser suporte ftp
# adduser anonymous ftp
Agora vamos criar as pastas raiz do ftp, do usuário anonymous e do suporte definidos nas tags correspondentes no arquivo de configuração:
# mkdir /ftp
# mkdir /ftp/anonimo
# mkdir /ftp/suporte
Vamos ajustar a permissão das pastas:
Define o grupo ftp como dono do diretório /ftp e todos seus subdiretórios (opção -R)
# chown -R ftp.ftp /ftp
Define permissão total para o grupo ftp do diretório /ftp e todos seus subdiretórios (opção -R)
# chmod 575 -R /ftp
Basta agora liberamos as portas 21 bem como as portas 60000 ao 62000 no firewall. Se você utiliza o Iptables adicione as seguintes linhas no seu script:
iptables –A INPUT –p tcp --dport 21 –j ACCEPT
iptables –A INPUT –p tcp --dport 60000:62000 –j ACCEPT
#/etc/init.d/proftpd restart
Caso você receba um erro de grupo nobody não encontrado, ao iniciar o servidor proftpd crie o grupo nobody com o comando abaixo e torne a reiniciar o proftpd:
# addgroup nobody
#/etc/init.d/proftpd restart
COMANDOS FTP PADRONIZADOS
Os comandos abaixo dizem respeito a comandos FTP padronizados pela RFC 959, os quais irão aparecer nas tags
Vejamos abaixo alguns comandos que podem ser adicionados nas tags
list Permite que o usuário liste os arquivos dos diretórios.
nlst Lista o nome dos diretórios.
retr Executa o download de um arquivo.
pwd Mostra o diretório atual.
size Permite o retorno do tamanho de um arquivo em decimal.
stat Retorna informações sobre o servidor.
cwd Permite definir o diretório inicial no ato da conexão.
cdup Marca o diretório acessado como diretório raiz para os demais.
stor, stou Permitem iniciar o upload de arquivos.
appe Utilizado para acrescentar informações ao final de um arquivo.
rnfr, rnto Utilizados para renomear arquivos.
dele Utilizado para exclusão de arquivos.
mkd Utilizado para criar diretórios.
CONCLUSÃO
Com a parte 1 desse tutorial nosso servidor FTP já está no ar e pronto para ser utilizado, podendo ser acessado normalmente por qualquer cliente FTP (mesmo que não possua suporte a conexão segura SSL como o Firezilla ou o Ftp-ssl, isto porque iremos implementar a transferência segura SSL na parte 2.
Não percam a continuação…
REFERÊNCIAS
FILE, transference protocol. Disponível em: < http://en.wikipedia.org/wiki/File_Transfer_Protocol > Acesso em: 08 ago. 2011.
MORIMOTO, Carlos. Instalando um servidor ftp. Disponível em: < http://www.hardware.co m.br/livros/servidores-linux/instalando-servidor-ftp.html > Acesso em: 08 de ago. 2011.
RIBEIRO, Pinguim. Proftpd + tls/ssl. Disponível em:< http://pinguimribeiro.wikidot.com/proftpd-tls-ssl > Acesso em: 07 ago. 2011.
RIBEIRO, Pinguim. Certificados ssl auto-assinados. Disponível em: < http://pinguimribeiro.wikidot.com/ssl-cert-self > Acesso em: 07 ago. 2011.
LIST, of raw command. Disponível em: < http://www.nsftools.com/tips/RawFTP.htm > Acesso em 08 ago. 2011.
Irineu boa tarde, porque você utilizou um range de porta 60000 a 62000 nesse proftpd ? estou criando um ftp seguro usando o zebedee mas esta dando erro, fiz umas pesquisas na internet e descobri que tinha que colocar esse range de porta, isso é necessario para o proftpd ?
ResponderExcluirjoao pandin
Olá Leandro.
ExcluirÉ necessário para utilização de FTP passivo.
Mais detalhes no link abaixo:
http://wiki.locaweb.com.br/pt-br/FTP_Passivo_%28PasvMode%29_vs_FTP_Ativo
Obrigado pela visita!
Tudo foi muito bom!
ResponderExcluirJá fiz tudo isso!
Criei as pastas, as permissões, tudo direitinho.
Consigo acessar pelo navegador o FTP, mas quando uso o Dreamweaver CS5, fala q n tenho acesso a pasta ou não existe.
PQ ???
Olá Gustavo,
ExcluirVerifique se o ftp embutido no Dreamweaver trabalha com FTP passivo, ou se existe alguma configuração a ser feita para trabalhar nesse modo.
Obrigado pela visita!