Como Configurar vsftpd para um Usuário's Directory no Ubuntu 18.04

Introdução

FTP, sigla para File Transfer Protocol, é um protocolo de rede que já foi amplamente utilizado para a transferência de arquivos entre um cliente e um servidor. Desde então foi substituído por formas mais rápidas, mais seguras e mais convenientes de entregar arquivos. Muitos usuários casuais da Internet esperam baixar diretamente de seu navegador web com https, e usuários de linha de comando são mais propensos a usar protocolos seguros, como o scp ou SFTP.,

FTP ainda é usado para suportar aplicações antigas e fluxos de trabalho com necessidades muito específicas. Se você tiver uma escolha do protocolo a usar, considere explorar as opções mais modernas. Quando você precisa de FTP, no entanto, vsftpd é uma excelente escolha. Otimizado para segurança, desempenho e estabilidade, o vsftpd oferece uma forte proteção contra muitos problemas de segurança encontrados em outros servidores FTP e é o padrão para muitas distribuições Linux.,

neste tutorial, irá configurar o vsftpd para permitir que um utilizador envie ficheiros para a sua pasta pessoal usando o FTP com credenciais de autenticação seguras pelo SSL/TLS.

pré-Requisitos

Para seguir este tutorial você vai precisar de:

  • Ubuntu 18.04 servidor e um usuário não-root com o comando sudo privilégios: Você pode aprender mais sobre como configurar um usuário com esses privilégios em nosso Servidor Inicial de Instalação do Ubuntu 18.04 guia.,

Passo 1 — Instalando o vsftpd

Vamos começar a actualizar a nossa lista de pacotes e instalar o vsftpd servidor:

  • sudo apt update
  • sudo apt install vsftpd

Quando a instalação estiver concluída, vamos copiar o arquivo de configuração para que possamos começar com um espaço em branco de configuração, salvar o original como a cópia de segurança:

  • sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

Com uma cópia de segurança da configuração no local, estamos prontos para configurar o firewall.

Passo 2-abrir a Firewall

vamos verificar o estado da firewall para ver se está activa., Se for, garantiremos que o tráfego FTP é permitido para que as regras da firewall não bloqueiem os nossos testes.

Verificar o estado da firewall:

  • sudo ufw status

neste caso, apenas o SSH é permitido através de:

Output
Status: activeTo Action From-- ------ ----OpenSSH ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)

Você pode ter outras regras em vigor ou não de regras de firewall em tudo. Uma vez que apenas o tráfego SSH é permitido neste caso, vamos precisar adicionar regras para o tráfego FTP.,

Vamos abrir as portas 20 e 21 para FTP, porta 990 para quando nós habilitar o TLS, e as portas 40000-50000 para o intervalo de passivo portas pretendemos definido no arquivo de configuração:

  • sudo ufw allow 20/tcp
  • sudo ufw allow 21/tcp
  • sudo ufw allow 990/tcp
  • sudo ufw allow 40000:50000/tcp
  • sudo ufw status

as Nossas regras de firewall deve agora olhar como este:

Com vsftpd instalado e as portas necessárias abertas, vamos passar para a criação de um dedicado usuário de FTP.,

Passo 3-Preparar o directório do utilizador

criaremos um utilizador FTP dedicado, mas poderá já ter um utilizador que necessita de acesso FTP. Teremos o cuidado de preservar o acesso de um usuário existente aos seus dados nas instruções que se seguem. Mesmo assim, recomendamos que você comece com um novo usuário até que você tenha configurado e testado sua configuração.

Em primeiro lugar, adicione um utilizador de ensaio:

  • sudo adduser sammy

atribua uma senha quando solicitado. Sinta-se livre para pressionar ENTER através das outras indicações.,

FTP é geralmente mais seguro quando os usuários estão restritos a um diretório específico. vsftpd realiza isso com chroot prisões. Quando chroot está habilitado para usuários locais, eles são restritos ao seu diretório pessoal por padrão. No entanto, por causa da forma que vsftpd assegura o diretório, ele não pode ser escrito pelo Usuário. Isto é bom para um novo usuário que só deve se conectar através de FTP, mas um usuário existente pode precisar de escrever para sua pasta pessoal se eles também têm acesso shell.,

neste exemplo, em vez de remover privilégios de escrita no directório principal, vamos criar uma ftp directório para servir como o chroot e um gravável files diretório para armazenar os arquivos reais.,missões:

  • sudo ls -la /home/sammy/ftp
Output
total 84 dr-xr-xr-x 2 nobody nogroup 4096 Aug 24 21:29 .4 drwxr-xr-x 3 sammy sammy 4096 Aug 24 21:29 ..

em seguida, vamos criar o diretório para uploads de ficheiros e atribuir a propriedade para o usuário:

  • sudo mkdir /home/sammy/ftp/files
  • sudo chown sammy:sammy /home/sammy/ftp/files

Uma seleção de permissões no ftp diretório deve retornar o seguinte:

  • sudo ls -la /home/sammy/ftp

Finalmente, vamos adicionar um test.txt o ficheiro a utilizar quando estamos a testar:

  • echo "vsftpd test file" | sudo tee /home/sammy/ftp/files/test.txt

Agora que já garantiu o ftp diretório e permitido o acesso do usuário para o files diretório, vamos modificar a nossa configuração.,

Passo 4-Configurar o acesso FTP

estamos a planear permitir que um único utilizador com uma conta shell local se ligue com FTP. As duas configurações de chaves para isso já estão definidas em vsftpd.conf. Comece por abrir o ficheiro de configuração para verificar se as configurações na sua configuração correspondem às seguintes:

  • sudo nano /etc/vsftpd.conf
/etc/vsftpd.conf

a seguir, vamos permitir ao Utilizador carregar os ficheiros descomendando o write_enable configuração:

/etc/vsftpd.,conf
. . .write_enable=YES. . .

vamos também descomente chroot para evitar que o FTP-ligado utilizador de aceder a quaisquer arquivos ou comandos fora da árvore de diretório:

/etc/vsftpd.conf
. . .chroot_local_user=YES. . .

Vamos também adicionar um user_sub_token para inserir o nome de usuário em nossos local_root directory caminho para a nossa configuração vai trabalhar para este utilizador e de quaisquer outros futuros usuários. Adicione estas configurações em qualquer lugar do arquivo:

/etc/vsftpd.,conf
. . .user_sub_token=$USERlocal_root=/home/$USER/ftp

vamos também limitar a gama de portos que podem ser utilizados para FTP passivo para garantir que existem conexões suficientes:

/etc / vsftpd.conf
. . .pasv_min_port=40000pasv_max_port=50000

nota: no Passo 2, abrimos as portas que definimos aqui para o intervalo de portas passivo. Se você alterar os valores, certifique-se de atualizar suas configurações de firewall.

Para permitir acesso FTP em um caso-a-caso, vamos definir a configuração para que os usuários tenham acesso apenas quando eles são explicitamente adicionado a uma lista, em vez de por padrão:

/etc/vsftpd.,conf
. . .userlist_enable=YESuserlist_file=/etc/vsftpd.userlistuserlist_deny=NO

userlist_deny activa ou desactiva a lógica: quando está definida para , os utilizadores da lista têm acesso negado ao FTP. Quando ele é definido para NO, apenas os usuários da lista são autorizados a ter acesso.

Quando terminar de fazer as alterações, grave o ficheiro e saia do editor.

finalmente, vamos adicionar o nosso utilizador a /etc/vsftpd.userlist., Use o -a sinalizador para anexar o arquivo:

  • echo "sammy" | sudo tee -a /etc/vsftpd.userlist

Verifique se ele foi adicionado como você espera:

  • cat /etc/vsftpd.userlist
Output
sammy

Reinicie o daemon para carregar as alterações de configuração:

  • sudo systemctl restart vsftpd

Com a configuração no local, vamos passar para o teste de acesso FTP.

Passo 5-Teste de acesso FTP

configurámos o servidor para permitir que apenas o utilizador se ligue através de FTP. Vamos certificar-nos de que isto funciona como esperado.,

os utilizadores anónimos não devem ligar – se: desactivámos o acesso anónimo. Vamos testar isso tentando conectar anonimamente. Se nossa configuração for configurada corretamente, os usuários anônimos devem ter permissão negada. Abra outra janela de terminal e execute o seguinte comando. Certifique-se de substituir 203.0.113.0 com o servidor com endereço IP público:

  • ftp -p 203.0.113.0

Fechar a conexão:

  • bye

outros Usuários que sammy deve-se não conseguir ligar: ao lado, vamos tentar conectar-se como nosso sudo usuário.,> deve ser capaz de conectar-se, ler, e escrever arquivos: Vamos certifique-se de que o nosso designado usuário pode conectar-se:

  • ftp -p 203.0.113.0

Vamos mudar para o files diretório e use o get comando para transferir o arquivo de teste que criamos anteriormente, para a nossa máquina local:

  • cd files
  • get test.txt

a seguir vamos carregar o arquivo com um novo nome para teste permissões de gravação:

  • put test.txt upload.txt

Fechar a conexão:

  • bye

Agora que nós já testamos a nossa configuração, vamos tomar medidas para proteger ainda mais o nosso servidor.,

Passo 6-garantir as transacções

Uma vez que o FTP não encripta quaisquer dados em trânsito, incluindo as credenciais do utilizador, vamos permitir que o TLS/SSL forneça essa encriptação. O primeiro passo é criar os certificados SSL para uso com vsftpd.

Let’s use opensslto create a new certificate and use the -days flag to make it valid for one year. No mesmo comando, vamos adicionar uma chave privada RSA de 2048 bits., Definindo o -keyout e -out sinalizadores para o mesmo valor, a chave privada e o certificado será localizado no mesmo arquivo:

  • sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

Você será solicitado a fornecer informações de endereço para o seu certificado., Substitua suas próprias informações para destacar os valores abaixo:

Para informações mais detalhadas sobre o certificado de sinalizadores, consulte o OpenSSL Essentials: Trabalhar com Certificados SSL, Chaves Privadas e representantes de suporte ao cliente

Depois de criar o certificado, abra o vsftpd arquivo de configuração novamente:

  • sudo nano /etc/vsftpd.conf

em Direção à parte inferior do arquivo, você verá duas linhas que começam com rsa_. Comentá-los para que fiquem assim:

/etc/vsftpd.,conf
. . .# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem# rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key. . .

Abaixo-los, adicione as seguintes linhas que apontam para o certificado e a chave privada que acabamos de criar:

/etc/vsftpd.conf
. . .rsa_cert_file=/etc/ssl/private/vsftpd.pemrsa_private_key_file=/etc/ssl/private/vsftpd.pem. . .

Depois disso, forçaremos o uso de SSL, o que impedirá que os clientes que não conseguem lidar com TLS se conectem. Isto é necessário para garantir que todo o tráfego é criptografado, mas pode forçar o seu usuário FTP a mudar de clientes. Change ssl_enableto:

/etc / vsftpd.,conf
. . .ssl_enable=YES. . .

Depois disso, adicione as seguintes linhas para negar explicitamente conexões anônimas sobre SSL e para exigir SSL tanto para transferência de dados como para logins:

/etc / vsftpd.conf
. . .allow_anon_ssl=NOforce_local_data_ssl=YESforce_local_logins_ssl=YES. . .

Após isso, configure o servidor para usar o TLS, o preferido sucessor do SSL, adicionando as seguintes linhas:

/etc/vsftpd.conf
. . .ssl_tlsv1=YESssl_sslv2=NOssl_sslv3=NO. . .

finalmente, vamos adicionar mais duas opções. Primeiro, não vamos exigir a reutilização SSL porque ele pode quebrar muitos Clientes FTP., Vamos precisar de suites de cifra” alta”, que atualmente significa comprimentos de chave iguais ou superiores a 128 bits:

/etc/vsftpd.conf
. . .require_ssl_reuse=NOssl_ciphers=HIGH. . .

a secção do ficheiro acabado deve ser assim:

/etc/vsftpd.conf

quando terminar, salve e feche o arquivo.

reinicie o servidor para que as alterações façam efeito:

  • sudo systemctl restart vsftpd

neste ponto, não seremos mais capazes de nos conectar com um cliente de linha de comando inseguro., Se tentássemos, veríamos algo como:

A seguir, vamos verificar que podemos nos conectar usando um cliente que suporta TLS.

Step 7 — testando TLS com FileZilla

Os Clientes FTP mais modernos podem ser configurados para usar a encriptação TLS. Vamos demonstrar como se conectar com o FileZilla por causa de seu suporte multi-plataforma. Consulte a documentação para outros clientes.

Quando abrir pela primeira vez o FileZilla, encontre o ícone do Gestor de páginas logo acima da Máquina de palavras, o ícone mais à esquerda na linha superior. Carregue nele:

uma nova janela irá abrir., Carregue no botão novo Site no canto inferior direito:


sob os meus Sites irá aparecer um novo ícone com as palavras “new site”. Você pode nomeá-lo agora ou retornar mais tarde e usar o botão mudar o nome.

preencha o campo máquina com o nome ou endereço IP. No menu de encriptação, seleccione a opção necessitar de FTP explícito sobre TLS.

para o tipo de Logon, seleccione pedir a senha. Preencha o seu utilizador de FTP no campo do utilizador:

Carregue em ligar no fundo da interface., Ser-lhe-á pedida a senha do utilizador:

Carregue em OK para se ligar. Deverá agora estar ligado ao seu servidor com a encriptação TLS/SSL.,ficate que se parece com isso:

Quando você aceitou o certificado, clique duas vezes o files pasta e arraste upload.txt para a esquerda para confirmar que você é capaz de fazer download de arquivos:

Quando você tiver feito isso, clique com o botão direito do mouse sobre o local, copiar, mudar o nome para upload-tls.txt e arrastá-lo de volta para o servidor para confirmar que você pode fazer upload de arquivos:

Você já confirmada de que você pode de forma segura e com sucesso a transferência de arquivos com SSL/TLS habilitado.,

Passo 8 — desativar o acesso à linha de comandos (opcional)

Se não puder usar o TLS por causa dos requisitos do cliente, poderá ganhar alguma segurança ao desactivar a capacidade do utilizador de FTP de fazer login de qualquer outra forma. Uma maneira relativamente direta de impedi-lo é criando uma shell personalizada. Isto não irá fornecer qualquer encriptação, mas irá limitar o acesso de uma conta comprometida a arquivos acessíveis por FTP.,

Primeiro, abra um arquivo chamado ftponly bin diretório:

  • sudo nano /bin/ftponly

Adicionar uma mensagem informando o utilizador por que eles são incapazes para log in:

/bin/ftponly
#!/bin/shecho "This account is limited to FTP access only."

Salve o arquivo e saia do editor.,Altere as permissões para tornar o arquivo executável:

  • sudo chmod a+x /bin/ftponly

Abra a lista de válido conchas:

  • sudo nano /etc/shells

Na parte inferior adicionar:

/etc/shells
. . ./bin/ftponly

Atualizar o shell do usuário com o seguinte comando:

  • sudo usermod sammy -s /bin/ftponly

Agora, tente fazer logon no seu servidor de sammy:

Você deve ver algo como:

Output
This account is limited to FTP access only.Connection to 203.0.113.0 closed.

Isso confirma que o usuário não pode mais ssh para o servidor e está limitada ao acesso FTP apenas.,

conclusão

neste tutorial cobrimos a configuração de FTP para usuários com uma conta local. Se precisar de usar uma fonte de autenticação externa, poderá querer ver o suporte de vsftpddos utilizadores virtuais. Isto oferece um conjunto rico de opções através do uso do PAM, os módulos de autenticação Pluggable, e é uma boa escolha se você gerenciar usuários em outro sistema, como LDAP ou Kerberos.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *