Instalando um servidor FTP – Linux

ftp O servidor de FTP mais usado no Linux é o Proftpd, disponível em quase todas as distribuições. O funcionamento do FTP é bem mais simples que o do Samba ou SSH, por isso ele é usado como uma forma simples de disponibilizar arquivos na internet ou mesmo dentro da rede local, sem muita segurança.

A principal limitação do protocolo FTP é que todas as informações são transmitidas de forma não encriptada, como texto puro, incluindo os logins e senhas. Ou seja, alguém capaz de sniffar a conexão, usando um programa como o Ethereal, veria tudo que está sendo transmitido. Para aplicações onde é necessário ter segurança na transmissão dos arquivos, é recomendável usar o SFTP, o módulo do SSH que permite transferir arquivos de forma encriptada. Apesar disso, se você quiser apenas criar um repositório com alguns arquivos para download ou manter um servidor público como o Ibiblio.org, então o FTP é mais interessante, por ser mais simples de usar.

O servidor aceita conexões remotas usando os logins dos usuários cadastrados na máquina. Lembre-se de que, para adicionar novos usuários, você pode usar o comando adduser ou algum utilitário de administração incluído na distribuição, como o system-config-users, o users-admin ou o kuser.

Não é difícil instalar o Proftpd, basta procurar pelo pacote “proftpd” na distribuição usada, como em:

# apt-get install proftpd
# yum install proftpd

ou:
# urpmi proftpd

No Debian, durante a instalação do pacote do Proftpd, geralmente são feitas algumas perguntas. A primeira é se você deseja deixar o servidor FTP ativo em modo standalone ou em modo inetd.

O standalone é mais seguro e mais rápido, enquanto o inetd faz com que ele fique ativo apenas quando acessado, economizando cerca de 400 KB de memória RAM (que fazem pouca diferença hoje em dia). O modo standalone é a opção recomendada.

Você terá também a opção de ativar o acesso anônimo, que permite acessos anônimos (somente leitura) na pasta “/home/ftp”, onde você pode disponibilizar alguns arquivos para acesso público. Nesse caso, os usuários fazem login no servidor usando a conta “anonymous” e um endereço de e-mail como senha. Caso prefira desativar o acesso anônimo, apenas usuários com login válido na máquina poderão acessar o FTP.

Depois de concluída a instalação, o servidor fica ativo por default, é inicializado automaticamente durante o boot e pode ser controlado manualmente através do serviço “proftpd”, como em “/etc/init.d/proftpd start”.

Você pode acessar outras máquinas da rede com servidores FTP ativos usando o GFTP, o Konqueror ou o próprio navegador. O FTP pode ser usado também como opção para transferência de arquivos na rede local. Uma das vantagens do FTP é que existem clientes para todas as plataformas, você pode baixar o Filezilla, um servidor e cliente de FTP for Windows, no http://filezilla.sourceforge.net/.

A configuração manual do servidor FTP é feita através do arquivo “/etc/proftpd/proftpd.conf“. Um arquivo configurado no CentOS pode ser usado no Mandriva (por exemplo), ou vice-versa; afinal, independentemente de estar usando o Debian, Fedora ou o Mandriva, o proftpd será sempre o mesmo.

Sempre que fizer alterações no arquivo, reinicie o servidor para que elas entrem em vigor. Para isso, use o comando “/etc/init.d/proftpd restart“.

No caso do Debian Etch e do Ubuntu 6.10 em diante, o servidor é configurado para utilizar endereços IPV6 por padrão, o que faz com que ele exiba uma mensagem de erro e aborte a inicialização caso você não tenha configurado a rede IPV6.

Para solucionar o problema, abra o arquivo “/etc/proftpd.conf” e substitua a linha:

UseIPv6 on

por:

UseIPv6 off

Uma das primeiras opções do arquivo é a opção Port, que permite alterar a porta usada pelo FTP. O padrão é usar a porta 21, mas muitos serviços de banda larga bloqueiam as portas 21 e 80 para que os usuários não rodem servidores. Nesse caso, você pode mudar para a porta 2121, por exemplo:

# Port 21 is the standard FTP port.
Port 2121

Ao mudar a porta padrão do servidor, os usuários precisarão indicar manualmente a porta no cliente de ftp ou navegador, como em: ftp://200.234.213.23:2121.

Em seguida, vem a opção MaxClients, que limita o número de conexões simultâneas ao servidor FTP. Esta opção trabalha em conjunto com a limitação de banda (veja a seguir). Você pode limitar os downloads de cada usuário a um máximo de 10 KB/s e limitar o servidor a 3 usuários simultâneos, por exemplo. Assim, o FTP consumirá um máximo de 30 KB/s do link do servidor.

MaxClients 30

Se você quiser limitar o acesso dos usuários, prendendo-os em seus respectivos diretórios home, adicione a linha “DefaultRoot ~” no final do arquivo. Lembre-se de que no Linux o “~” é um curinga, que é automaticamente substituído pela pasta home do usuário que está logado:

DefaultRoot ~

Para ativar a limitação de banda, adicione a linha “TransferRate RETR 8:10″, onde o “8” pode ser substituído pela taxa desejada, em KB/s, por usuário:

TransferRate RETR 8:10

A princípio, apenas os usuários que tiverem logins válidos no servidor poderão acessar o FTP. Caso você queira abrir um FTP público, adicione estas linhas no arquivo de configuração. Elas ficam comentadas no arquivo original:

<Anonymous ~ftp>
User ftp
Group nogroup
UserAlias anonymous ftp
DirFakeUser on ftp
DirFakeGroup on ftp
RequireValidShell off
MaxClients 20
DisplayLogin welcome.msg
DisplayFirstChdir .message
<Directory *>
<Limit WRITE>
DenyAll
</Limit>
</Directory>

<Directory incoming>
Umask 022 022
<Limit READ WRITE>
DenyAll
</Limit>

<Limit STOR>
AllowAll
</Limit>
</Directory>
</Anonymous>

A linha “MaxClients” determina o número máximo de usuários anônimos que poderão se logar simultaneamente no servidor. Essa opção é separada da MaxClients principal, que limita o número de usuários com login válido. Você pode permitir 30 usuários válidos e mais 20 anônimos, por exemplo.

A opção “DisplayLogin welcome.msg” indica a mensagem de boas-vindas que é mostrada quando os usuários fazem login no FTP. Por padrão, é exibido o conteúdo do arquivo “/home/ftp/welcome.msg“.

Os usuários anônimos têm acesso apenas aos arquivos dentro da pasta “/home/ftp“, que é visto pelo cliente FTP como o diretório raiz do servidor. Graças a isso, eles não têm como ver, muito menos alterar outros arquivos do sistema.

A seção “Directory incoming” mais abaixo cria uma pasta de upload (por padrão a “/home/ftp/incoming”), onde os anônimos poderão dar upload de arquivos. A idéia é que você veja periodicamente o conteúdo da pasta e mova o que for útil para a pasta “/home/ftp”, para que o arquivo fique disponível para download.

Por padrão, os anônimos não podem ver o conteúdo da pasta incoming, podem apenas dar upload. Se necessário, crie a pasta incoming usando os comandos:

# mkdir /home/ftp/incoming
# chown nobody:nogroup /home/ftp/incoming

Para acessar o seu servidor, os clientes devem usar o login “anonymous” ou “ftp”, usando um endereço de e-mail qualquer como senha.

Uma medida comum ao ativar o upload para os usuários anônimos é usar uma partição separada para o FTP, para evitar que algum engraçadinho fique dando upload durante a madrugada até lotar o HD do servidor. Nesse caso, você precisa apenas adicionar uma linha no arquivo “/etc/fstab” para que a partição desejada seja montada durante o boot. Esta linha de exemplo montaria a partição /dev/hda3, formatada em ReiserFS na pasta /home/ftp:

/dev/hda3 /home/ftp reiserfs defaults 0 2

Criando usuários e ajustando as permissões de acesso

Imagine agora que você quer uma configuração um pouco mais complexa, com vários usuários, cada um tendo acesso a apenas uma pasta específica. Esta configuração pode ser usada em conjunto com os virtual hosts do Apache (permitindo que os responsáveis possam atualizar os arquivos do site), ou em situações em que seu servidor hospeda arquivos de diversos usuários ou projetos diferentes.

O responsável pelo projeto1 pode dar upload para a pasta “/home/ftp/projeto1” (por exemplo), mas não deve ter acesso a outras pastas nem a outros arquivos do sistema. Os usuários anônimos terão acesso às pastas de todos os projetos, mas, naturalmente, apenas para leitura.

A forma mais simples de fazer isso é criar os usuários que terão acesso ao FTP, colocando a pasta a que terão acesso como seu diretório home e bloqueando o uso do shell, para que eles não possam acessar o servidor remotamente através de outros meios (via ssh, por exemplo).

Vamos começar adicionando no arquivo a opção que prende os usuários nos seus diretórios home. Abra o arquivo “/etc/proftpd.conf” e adicione (no final do arquivo) a linha:

DefaultRoot ~

Você vai precisar adicionar também a seção para liberar o acesso anônimo ao ftp, que vimos acima. Como queremos apenas que os mantenedores dos projetos possam dar upload de arquivos, remova a seção “<Directory incoming>”. A seção vai ficar:

<Anonymous ~ftp>
User ftp
Group nogroup
UserAlias anonymous ftp
DirFakeUser on ftp
DirFakeGroup on ftp
RequireValidShell off
MaxClients 20
DisplayLogin welcome.msg
DisplayFirstChdir .message
<Directory *>
<Limit WRITE>
DenyAll
</Limit>
</Directory>
</Anonymous>

O diretório padrão do FTP, onde os usuários anônimos terão acesso aos arquivos, é a “/home/ftp“. Em outras distribuições pode ser usada a pasta “/var/ftp“; dê uma olhada em como o arquivo vem configurado por padrão.

De volta à configuração, vamos começar criando subpastas para cada projeto:

# mkdir /home/ftp/projeto1
# mkdir /home/ftp/projeto2
# mkdir /home/ftp/projeto3
etc…

O próximo passo é ir adicionando os usuários no sistema, tendo o cuidado de fazer as alterações no diretório home e no shell padrão, para que eles tenham acesso somente via FTP e apenas à pasta desejada.

Para adicionar os usuários, use o comando “adduser“, como se estivesse criando uma conta normal:

# adduser projeto1

Acrescentando usuário projeto1…
Acrescentando novo grupo projeto1 (1005).
Acrescentando novo usuário projeto1 (1005) com grupo projeto1.
Criando diretório pessoal /home/projeto1.
Copiando arquivos de /etc/skel

Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

Veja que por padrão ele cria a pasta “/home/projeto1”, que passa a ser o diretório home do usuário criado. Entretanto, neste caso queremos que o home seja a pasta “/home/ftp/projeto1“, onde ele dará upload dos arquivos.

Para alterar isso, abra o arquivo “/etc/passwd“, onde ficam guardadas as informações dos usuários. Na última linha do arquivo você verá:

projeto1:x:1005:1005:,,,:/home/projeto1:/bin/bash

Vamos alterar o “/home/projeto1” para “/home/ftp/projeto1” (para trocar o home) e o “/bin/bash” para “/bin/false“, de forma a impedir que usuário tenha acesso ao shell do servidor e possa executar comandos (fazendo o que não deve no servidor). Se você preferir que, além do acesso via ftp, os usuários tenham acesso via ssh, então mantenha o “/bin/bash”. Depois das alterações, a linha ficará:

projeto1:x:1005:1005:,,,:/home/ftp/projeto1:/bin/false

Você pode aproveitar para remover a pasta /home/projeto1, já que não precisaremos mais dela:

# rm -rf /home/projeto1/

Na verdade, esse processo serve para que você entenda melhor o procedimento de criação destes usuários “falsos” no Linux. Estas alterações podem ser especificadas ao criar o usuário. Não é preciso sair editando todos os arquivos manualmente. O comando para criar o usuário “projeto1”, usando a pasta “/home/ftp/projeto1” como home e o “/bin/false” como shell, seria:

# adduser –home /home/ftp/projeto1 –shell /bin/false –no-create-home projeto1

Não esqueça de acertar as permissões da pasta /home/ftp/projeto1:

# chown -R projeto1:projeto1 /home/ftp/projeto1/

Depois de concluir a configuração, falta só reiniciar o servidor FTP para que as configurações entrem em vigor:

# /etc/init.d/proftpd restart

Em distribuições derivadas do Debian, você vai precisar adicionar a linha “/bin/false” no final do arquivo /etc/shells para que ele possa ser usado:

# echo “/bin/false” >> /etc/shells

Feito isso, você já conseguirá se logar no servidor usando o login criado. O usuário não enxerga nada fora da pasta “/home/ftp/projeto1” e todos os arquivos que ele der upload vão para lá.

A senha de acesso ao FTP é a mesma definida na hora de criar o usuário. O Proftpd simplesmente aproveita o sistema de autenticação do sistema. Se você precisar alterar a senha do usuário, use o comando “passwd projeto1“.

Para usar o Proftpd em conjunto com os virtual hosts do Apache, a configuração é a mesma, com exceção de que você não precisaria habilitar o acesso anônimo, já que o FTP seria usado apenas pelos webmasters dos sites hospedados.

Nesse caso, ao criar os usuários, use a pasta com os arquivos do site como home, como em:

# adduser –home /var/www/joao –shell /bin/false –no-create-home joao

A opção “–no-create-home” evita que o sistema copie os arquivos do diretório “/etc/skel” (como os arquivos .bashrc, .bash_history e outros) para dentro da pasta de arquivos, “sujando” o diretório. Ao terminar, não se esqueça de alterar as permissões da pasta, de forma que o usuário tenha permissão de escrita:

# chown -R joao:joao /var/www/joao

Graças ao uso da opção “DefaultRoot ~”, os usuários terão acesso apenas à pasta com os arquivos do site, sem acesso às pastas dos outros usuários ou às demais pastas do sistema. Esta é justamente a configuração usada na maioria dos serviços de shared hosting onde o acesso é feito via FTP. O sistema não é nada seguro e de vez em quando algumas das senhas são roubadas, mas, como ele é fácil de implementar e poucos usuários tem dificuldades em acessar as contas, a tradição continua.

Fonte: Desmonta&CIA

Anúncios

Tags:,

About Desmonta&CIA

Somos um blog que busca informar aos apaixonados por tecnologia tudo sobre o mundo de TI.

One response to “Instalando um servidor FTP – Linux”

  1. Daniel says :

    Ótimo artigo. Extremamente funcional e bem escrito. Parabéns, Daniel.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: